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

析构函数如何用啊为什么小弟我一加析构函数就会出错

2012-02-17 
析构函数怎么用啊,为什么我一加析构函数就会出错?classMyString{public:................private:intsize

析构函数怎么用啊,为什么我一加析构函数就会出错?
class   MyString  
{
public:
........
........
private:
              int   size;
              char   *   myStr;
};
MyString::~MyString()
{
delete   []myStr;
}
去掉其中的析构函数程序就可以正常运行,但一旦加上就会出错.这是什么原因?我的析构函数写的有错误吗?

[解决办法]
晕上面写错了一个地方.看下面这个:

因为你的程序并没有为myStr这个char指针分配内存,就调用了delete[] myStr,所以出错.可以加一个所省构造函数来修改

class MyString
{
public:

MyString(const char *p=0)//加一个缺省值为0的构造函,这样在对象生命期结束调用{ //析构函数时delete []myStr就不会出错
if(p!=0)
{
myStr=new char[strlen(p)+1]; //这里要加1,上面那个忘了 :P
strcpy(myStr,p);
}
}

private:
int size;
char * myStr;
};
MyString::~MyString()
{
delete []myStr;
}
[解决办法]
在构造函数中,先为myStr赋个初值,再进行其它操作。
MyString(const char *p=0)
: myStr(NULL)
{
if(p!=0)
{
myStr=new char[strlen(p)+1];
strcpy(myStr,p);
}
}
delete空指针不会出错,但是在开辟内在空间时,指针myStr并不是NULL,这就会出错了.

热点排行