首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

为什么Delete会出错?见上代码。求讨论

2012-09-19 
为什么Delete会出错?见下代码。求讨论!C/C++ codeclass CBase{public:CBase() { cout CBase endl

为什么Delete会出错?见下代码。求讨论!

C/C++ code
class CBase{public:    CBase() { cout << "CBase" << endl; }    virtual ~CBase() { cout << "~CBase" << endl;}};class CDerived : public CBase{public:    CDerived() { cout << "CDerived" << endl; }    ~CDerived() { cout << "~CDerived" << endl; }};int main(){    CBase base;    CBase* pBase = new CBase;    pBase = &base;    delete pBase; //运行时报错!}


[解决办法]
pBase指向了栈区内存,那是系统管理的空间,不能用delete释放的。
你程序在堆区new的空间最后没有被释放,造成了内存泄露。
最好不要随便把申请到堆区空间的指针指向别处,至少也要有一个指针指向申请的空间。以便最后释放的是自己申请的那块内存。
[解决办法]
pBase变量的所占的内存是不能释放的,因为他是栈上的内存,是系统分配的,程序员不能释放,而pBase所指向的内存是你自己在堆上分配的,是可以释放的;delete只能释放new分配的内存
[解决办法]
程序有两个问题: 
1.内存泄露,new出来的没delete;
2.两次析构;base不是new出来,在生命周期结束(也就是你函数结束的时候)会自动释放,你主动调用delete将其析构,系统在函数结束时又会对其析构,所以才会报错。而且报错的地方应该是程序退出时,而不应该是你说的那个地方。

热点排行