在使用new时容易出错的一个小问题

今天在使用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时就会出错。

阅读更多
上一篇聊一下去招聘会的感受
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭