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的时候抛出异常 展开
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的时候抛出异常 展开
3个回答
展开全部
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就在这里。
呵呵。
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样。
展开全部
char an[10];//内存在栈区,不需要人为释放
new char[10];//内存在堆区,需要delete配套释放
本来指针s指向了堆区,后来又被你修改成指向了an,造成释放错误。
从你的程序内容来看,根本没有必要申请堆区内存啊。
new char[10];//内存在堆区,需要delete配套释放
本来指针s指向了堆区,后来又被你修改成指向了an,造成释放错误。
从你的程序内容来看,根本没有必要申请堆区内存啊。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
s 指向的是栈内存。 delete 只能释放 堆的内存。一释放栈的内存就会有问题。我这答案比一楼的好。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询