-1

我有以下情况。

int *arrayP=new int[4];
arrayP[0]=0;arrayP[1]=1;arrayP[2]=2;arrayP[3]=3;
int *temp;
cout<<arrayP[0]<<endl;
temp=arrayP;
++arrayP;
cout<<arrayP[0];
cout<<arrayP[1];
delete temp;
cout<<arrayP[0];

输出

0
1
2
-1212222

为什么会这样?arrayP 指向大小为 4 的数组的第一个元素。因此 temp 也指向第一个元素 现在为什么删除 temp 即第一个元素也会删除整个整数数组。arrayP 确实存储了数组的下一个元素的地址,因此该数组不是孤立的。(我假设它已删除整数数组,因为 arrayP[0] 显示垃圾值。)

如果是这种情况(即删除 temp 将删除整个整数数组),delete[] 和 delete 之间有什么区别。

4

1 回答 1

8

如果你使用new[]你必须用它来平衡它delete[]

如果你使用new你必须用它来平衡它delete

混合它们会导致内存泄漏/程序崩溃(技术上未定义的行为)。(在您的示例中,C++ 正在内部记录您创建的 4int秒;调用delete[]允许 C++ 访问此记录。调用delete不会)。

于 2013-07-04T14:49:12.007 回答