我有一个例子:
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/