为什么Delete会出错?见上代码。求讨论
为什么Delete会出错?见下代码。求讨论!C/C++ codeclass CBase{public:CBase() { cout CBase endl
为什么Delete会出错?见下代码。求讨论!
C/C++ codeclass 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将其析构,系统在函数结束时又会对其析构,所以才会报错。而且报错的地方应该是程序退出时,而不应该是你说的那个地方。