重新定位数组指针是否会影响Delete运算符的工作?
情况1)
int main(){
int *a = new int[5];
a++; a--;
delete[] a;
return 0;
}
情况(2)
int main(){
int *a = new int[5];
a++;
delete[] a;
return 0;
}
情况(3)
int main(){
int *a = new int[5];
a++;
delete[] a;
a--;
delete[] a;
return 0;
}
编辑:[情况2和3]它是未定义的。操作员可能会根据其地址搜索要取消分配的对象,但将找不到它。不要在家尝试;)
在这里阅读更多。
原始问题的原始答案---对于情况1 ---:您的代码并未真正重定位数组;最终传递给delete []运算符的地址与(由new []运算符返回)分配的地址相同。总的来说,delete []的功能在此是安全的且已定义。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句