c++内存释放异常

[复制链接]
查看11 | 回复3 | 2013-7-4 15:34:05 | 显示全部楼层 |阅读模式
char* s=new char[10];s是一个指针,指向char[10]这段内存。char an[10];你定义了一个数组,他用完之后会自己自动回收s=an;现在你将指针S指向了数组an,因为an数组用完之后就自己回收了,你这个时候又delete []s;相当于又回收一遍,没有可以回收的东西,自然出错。 欢迎继续追问。 严重鄙视看完我的说我不好说自己好的二楼,我一直致力于以朴实的语言解答专业级问题。另外补充下:1、栈区(stack)― 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 an数组就存在这里。2、堆区(heap) ― 一般由程序员分配释放,...
回复

使用道具 举报

千问 | 2013-7-4 15:34:05 | 显示全部楼层
char an[10];//内存在栈区,不需要人为释放new char[10];//内存在堆区,需要delete配套释放本来指针s指向了堆区,后来又被你修改成指向了an,造成释放错误。从你的程序内容来看,根本没有必要申请堆区内存啊。...
回复

使用道具 举报

千问 | 2013-7-4 15:34:05 | 显示全部楼层
s 指向的是栈内存。 delete 只能释放 堆的内存。一释放栈的内存就会有问题。我这答案比一楼的好。...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行