删除vs删除[]

时间:2013-07-04 14:46:58

标签: c++ pointers destructor

我有以下情况。

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即第一个元素也会删除整个整数array.arrayP会存储数组的下一个元素的地址,因此数组不是孤立的。(我假设它删除了整数数组,因为arrayP [0]是显示垃圾值。)

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

1 个答案:

答案 0 :(得分:8)

如果您使用new[],则必须与delete[]进行平衡。

如果您使用new,则必须与delete进行平衡。

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