读书人

扯淡的析构函数!求大神指导

发布时间: 2012-10-12 10:17:04 作者: rapoo

扯淡的析构函数!求大神指点!
[size=12px][/size]我学数据结构时动态分配内存,后面用析构函数来释放空间。但是最后一运行析构函数就崩溃。不运行那个什么事都没有。我就写了个简单的例子,调试了下,发现真有问题。肯定是哪个地方我一点都没有想到。进行不下去了,求高手帮帮忙,找下错误。

我把程序完整的复制下来了。可以运行,就是最后会崩溃。恳请高手跑一下,然后指点指点,急切等侯[size=12px][/size]

//gouzao.h
#include<iostream>
using namespace std;
class gouzao
{
public:
gouzao();
~gouzao();
void shiyan();
gouzao operator=(gouzao aa);
void print();

private:
static n;
int m;
int *elem;
};

gouzao::gouzao()
{
elem=new int[10];
for(int i=0;i<10;i++)
{
elem[i]=i;
}
}
gouzao:: ~gouzao()
{
delete[] elem;
cout<<"delete......"<<endl;
}

void gouzao::shiyan()
{
int *elem_a;
gouzao cc; //试验的这个类成员,在这个试验函数里面就悲催了。
elem=new int[10];
cout<<"在这个下面会有delete"<<endl;
}

gouzao gouzao::operator=(gouzao aa)
{
for(int i=0;i<10;i++)
elem[i]=aa.elem[i];
return *this;
}

void gouzao::print()
{
for(int i=0;i<10;i++)
cout<<elem[i]<<" "<<endl;

}


//main.cpp
#include<iostream>
#include"gouzao.h"
using namespace std;

int main()
{
gouzao AA;
AA.print();
gouzao BB;
//gouzao CC;
//AA.shiyan();
cout<<"*************************是否前面有一个delete*************************"<<endl;
AA=BB;
//CC=BB;

return 0;

}

[解决办法]
delete要和new配对用啊,你声明的局部变量cc是在栈上分配的内存,不需要用delete,在推出作用域时会自动释放,乱用delete的后果是不可预期的
[解决办法]
定义一个拷贝构造函数,另外好好声明和定义赋值函数
[解决办法]
叫你不定义copy ctor,double deletion UB乐呵了吧。

读书人网 >C++

热点推荐