请教:c/c++中 int *p = new int; for (int i=0; i<3; i++) p[i] = i; delete p;//会在这里出错

请问这种内存该如何释放,或这种内存申请是否正确?... 请问这种内存该如何释放,或这种内存申请是否正确? 展开
 我来答
松甜恬0Je4ba
2013-04-04 · TA获得超过2.6万个赞
知道大有可为答主
回答量:7475
采纳率:100%
帮助的人:3464万
展开全部
你想分配的数组,但你只new了一个,这样不对。
int *p = new int[3]; //分配了3个元素的数组
for (int i=0; i<3; i++)
p[i] = i;
delete []p; //删除的时候 前面加上[]
追问
多谢!
另外请教一下为何我new了一个后可以正常使用?delete那一块空间为何不行呢?这种情况我不去申请内存有时却也是可以的,有时必须申请内存有时为何?敢请进一步指教!
追答
这和数组越界是一样的 数组越界也是可以输出的  只不过输出的东西你不知道是什么而已,而且有可能破坏内存。

指针是给你一个地址,你人为的顺着这个地址往下使用内存也是可以的,这并没有什么问题。问题是这块地址并没有分配给你,别的程序也可能使用,或者里面已经有东西了,所以内容才不可知。
jt780830
2013-04-04
知道答主
回答量:17
采纳率:0%
帮助的人:10.1万
展开全部
出错的提示是什么啊?
我觉得int *p=new int;//这句有问题,动态创建数组的话,应该像new int[5]这样,必须给定一个数
delete []p;
追问
int *p = new int; // 没问题,出错提示是内存出错,原因应该是一楼所说,也确实得申请指针数组。也同样感谢您的回答
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
布布影视剪辑
2013-04-04 · 超过33用户采纳过TA的回答
知道答主
回答量:83
采纳率:0%
帮助的人:58.4万
展开全部
p申请一个int,但是后面又p[i] = i,导致指针访问越界报错,应该可以new多个,再释放delete[]p
追问
那为何我只要不用delete,它就不会报错呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式