在这种情况下,数组a会被取消分配吗

Will array a get de-allocated in this case?

本文关键字:取消 分配 这种情况下 数组      更新时间:2023-10-16

重新定位数组指针是否会影响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[]操作员的地址与新[]操作员分配的地址相同(并由新[]操作员返回(。总体而言,此处delete[]的功能是安全和定义的。