首页 > 解决方案 > free:删除动态创建的数组时指针无效

问题描述

我目前正在练习指针算术,但在执行最后一行delete [] arr;.

我意识到在我的 Android 手机上使用 C4Droid 程序(使用编译器“G++ + Bionic”)时,相同的代码运行没有任何问题,但在我使用 GCC 的平板电脑上,它只是不起作用。我发现的唯一方法是确保 arr 数组当前指向第一个地址。它没有的那一刻似乎失败了。我不知道它是否应该在我的手机上也失败,或者它是否是我在平板电脑上使用的 IDE 中的配置问题(尝试使用代码块和 codelite)。你能帮忙吗?

我也很清楚,我正在为数组的前两个点初始化值,而在技术上可以选择比这更小的数组大小。这只是测试。

#include <string>
#include <iostream>

int main()
{
    int *arr{};
    size_t size{};
    std::cout << "Please enter the size of the array you want to create: "; std::cin >> size;
    arr = new int[size];
    *(arr + 0) = 5;
    *(arr + 1) = 10;
    std::cout << "++arr: " << ++arr << " (pointer incrementation, we move by an int and arr is now arr + 1)" << std::endl;  
    delete [] arr;
    return 0;
}

标签: c++arrayspointersdynamic-memory-allocationdelete-operator

解决方案


您没有删除分配的同一个指针 -++arr移动了指针。调用delete[]任何未分配的指针new type[]都是未定义的行为——它可以工作,它可能会发生灾难性的失败,并且它可以在两者之间做任何事情——但你真的不应该依赖它。


推荐阅读