C++指针问题(+20为免浪费积分,回答后再给分)

来源:百度知道 编辑:UC知道 时间:2024/05/24 01:38:53
有这样的一段程序:
int *arr = new int[n];
for(int i=0; i<=n; ++i) //注意这里的<=n
arr[i]=0;

delete[] arr;

运行则出现debug问题,问题就出在最后一句删除数组空间的语句。这是为什么?当然正常使用这个数组是没问题的,问题发现在越界使用数组之后。
我在这里是故意让数组越界的,我要问的是,为什么数组越界使用后,delete会出错,正常应该是在数组越界的地方出错,而不是到delete的时候才出错啊。

new 出来的空间是在内存自由存储空间中被称之为堆的一块区域。

所以动态分配出来n个空间后,第n+1个空间的位置是不确定的,这时候往里面赋值,会引起错误。

注:第n个空间的下标是arr[n-1];

而循环往arr[n]中写数据,显然会引起错误。

期待答案

为什么会这样呢?