c++ - 删除数组类型指针的元素导致错误?

标签 c++ memory memory-management

我有一个例子:

int* arr = new int[1];
//First Time
arr[0] = 5;
cout << &arr[0] << " " << arr[0] << endl;
delete &arr[0];
cout << &arr[0] << " " << arr[0] << endl;

//Second time
arr[0] = 5;
cout << &arr[0] << " " << arr[0] << endl;
delete &arr[0]; //Error from here
cout << &arr[0] << " " << arr[0] << endl;

上面代码的结果:
00529EF0 5
00529EF0 -572662307
00529EF0 5
//Where the code stop

我不知道为什么它会导致我的错误?它不允许我删除 arr[0]第二次,即使第一次成功删除,我为它分配了一个新值。

最佳答案

如果您使用 new[] 动态分配数组, 你必须用 delete[] 删除它,这将释放整个数组。你不能释放单个元素。您的代码具有未定义的行为,因为您使用了 delete而不是 delete[] ,所以任何事情都可能发生。仅仅因为它看起来有效并不意味着它是正确的。

关于c++ - 删除数组类型指针的元素导致错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60841074/

相关文章:

c++ - 检测内存泄漏的工具

c++ - 如何计算以下伪代码的封闭形式?

c++ - 在 C++ 中存储最后 n 个元素的正确数据结构

c++ - 类和类成员的联系

c++ - 使用新放置时删除此选项的替代方法

javascript - Javascript中 native 内存和堆内存的区别解释

c++ - 更改派生类继承的内容

memory - 试图了解用于资源的值以及多个容器部署的限制

c - 这段代码中使用 malloc 和不使用 malloc 有什么区别?

c - OpenCL 程序使用太多内存