c++内存释放异常

#include<iostream>usingnamespacestd;intmain(){charan[10];char*s=newchar[10];cin.get(a... #include <iostream>
using namespace std;

int main()
{
char an[10];
char* s=new char[10];
cin.get(an,10);
s=an;
cout<<s<<endl;
delete []s;
return 0;
}
delete的时候抛出异常
展开
 我来答
考试学习必备资料
2013-07-04 · TA获得超过348个赞
知道小有建树答主
回答量:125
采纳率:0%
帮助的人:143万
展开全部
char* s=new char[10];
s是一个指针,指向char[10]这段内存。
char an[10];你定义了一个数组,他用完之后会自己自动回收
s=an;现在你将指针S指向了数组an,因为an数组用完之后就自己回收了,
你这个时候又delete []s;相当于又回收一遍,没有可以回收的东西,自然出错。

欢迎继续追问。

严重鄙视看完我的说我不好说自己好的二楼,我一直致力于以朴实的语言解答专业级问题。另外补充下:
1、栈区(stack)― 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
an数组就存在这里。

2、堆区(heap) ― 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
s就在这里。

呵呵。
更多追问追答
追问
数组an赋值给s后,an部分就自动回收了?不应该的吧,这种回收应该到函数最后才回收的吧
追答
没有脑子的SB,看不懂吗,草!我哪句话说是因为数组an赋值给s后,an部分就自动回收了。草你马,不会百度吗。SB样。
玻璃麦田bd
2013-07-04 · TA获得超过451个赞
知道小有建树答主
回答量:249
采纳率:0%
帮助的人:275万
展开全部
char an[10];//内存在栈区,不需要人为释放
new char[10];//内存在堆区,需要delete配套释放
本来指针s指向了堆区,后来又被你修改成指向了an,造成释放错误。
从你的程序内容来看,根本没有必要申请堆区内存啊。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友455632d898
2013-07-04 · TA获得超过275个赞
知道小有建树答主
回答量:804
采纳率:0%
帮助的人:338万
展开全部
s 指向的是栈内存。 delete 只能释放 堆的内存。一释放栈的内存就会有问题。我这答案比一楼的好。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式