我有以下情况。
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将删除整个整数数组),删除[]和删除之间的区别。
答案 0 :(得分:8)
如果您使用new[]
,则必须与delete[]
进行平衡。
如果您使用new
,则必须与delete
进行平衡。
混合它们会导致内存泄漏/程序崩溃(技术上未定义的行为)。 (在您的示例中,C ++在内部记录您已创建4 int
s;调用delete[]
允许C ++访问此记录。调用delete
不会。)