请教:c/c++中 int *p = new int; for (int i=0; i<3; i++) p[i] = i; delete p;//会在这里出错
3个回答
展开全部
你想分配的数组,但你只new了一个,这样不对。
int *p = new int[3]; //分配了3个元素的数组
for (int i=0; i<3; i++)
p[i] = i;
delete []p; //删除的时候 前面加上[]
int *p = new int[3]; //分配了3个元素的数组
for (int i=0; i<3; i++)
p[i] = i;
delete []p; //删除的时候 前面加上[]
追问
多谢!
另外请教一下为何我new了一个后可以正常使用?delete那一块空间为何不行呢?这种情况我不去申请内存有时却也是可以的,有时必须申请内存有时为何?敢请进一步指教!
追答
这和数组越界是一样的 数组越界也是可以输出的 只不过输出的东西你不知道是什么而已,而且有可能破坏内存。
指针是给你一个地址,你人为的顺着这个地址往下使用内存也是可以的,这并没有什么问题。问题是这块地址并没有分配给你,别的程序也可能使用,或者里面已经有东西了,所以内容才不可知。
展开全部
出错的提示是什么啊?
我觉得int *p=new int;//这句有问题,动态创建数组的话,应该像new int[5]这样,必须给定一个数
delete []p;
我觉得int *p=new int;//这句有问题,动态创建数组的话,应该像new int[5]这样,必须给定一个数
delete []p;
追问
int *p = new int; // 没问题,出错提示是内存出错,原因应该是一楼所说,也确实得申请指针数组。也同样感谢您的回答
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
p申请一个int,但是后面又p[i] = i,导致指针访问越界报错,应该可以new多个,再释放delete[]p
追问
那为何我只要不用delete,它就不会报错呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询