今天在使用new申请动态数组时发现了一个小问题:
下面这段代码打印出来的是什么?程序能完美运行嘛?
#include<iostream>
using namespace std;
int main()
{
int *pi = new int(1);
int *pia = new int[10];
while (*pi<11)
{
pia[*pi] = *pi;
cout << pia[*pi] << endl;
*pi = *pi + 1;
}
delete pi;
delete[] pia;
return 0;
}
我发现这段程序能打印1到10,但不能完美运行,原因是什么?
在用new申请pia数组时我们申请的是10个空间,但我们是从下标1开始赋值的,漏掉了pia[0],多了一个pia[10],因为是在堆空间上申请的内存所以在给pia[10]赋值是不会出错,但delete时就会出错。