如何正确删除动态数组指针

How can I delete dynamic array pointer correctly

本文关键字:数组 指针 动态 删除 何正确      更新时间:2023-10-16

可能重复:
C++删除-它删除了我的对象,但我仍然可以访问数据
为什么不';不要删除或销毁任何东西?

我创建了动态数组,并添加了值​​到值​​这样的数组。

int *pArr;
pArr = new int[10];
for(int i=0;i<10;i++){
   pArr[i] = i+2;
}
delete[] pArr;  
// After deletion I can find the value of the array items.
cout << pArr[5] << endl;

正如您在上面的代码和最后一行中看到的,我可以毫无问题地输出数组中的第五个元素。由于应该是这样,数组已被删除。

要表明内存可以再次使用,请考虑以下代码扩展:

int *pArr;
pArr = new int[10];
for(int i=0;i<10;i++){
       pArr[i] = i+2;
}
delete[] pArr;
int *pArr2;
pArr2 = new int[10];
for(int i=0;i<10;i++){
       pArr2[i] = (2*i)+2;
}
cout << pArr[5] << endl;

它为我打印出12,即实际上来自pArr2[5]的值。或者至少我应该说它对我的机器来说是这样的,我的特定编译器&版本等。正如其他人所指出的,这是未定义的行为。但希望我的例子能向你展示至少一种未定义的行为。

一旦delete[]数组并且仍然尝试访问数组的元素,则为Undefined Behavior,任何行为都是可能的。

是的,这可能有效,但不能保证有效。Delete[]只会使内存失效,但不会将其归零。此时您引用的内存将失效。所以不要这样做:)