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

Debug Assertion Failed!解决方法

2013-02-24 
Debug Assertion Failed!运行的时候,总有Debug Assertion Failed!代码如下:#include iostreamusing name

Debug Assertion Failed!
运行的时候,总有Debug Assertion Failed!
代码如下:

#include <iostream>
using namespace std;

class Kid
{
private:
int m_nAge;
char *m_strName;
char *m_strSex;

public:
Kid(int age,char *name,char *sex);
~Kid();
void showKid();
};
Kid::Kid(int age,char *name,char *sex)
{
Kid::m_nAge = age;
Kid::m_strName = name;
Kid::m_strSex = sex;
}
Kid::~Kid()
{
cout<<"dispose object kid"<<endl;
delete []m_strName;
delete []m_strSex;
}
void Kid::showKid()
{
cout<<"姓名: "<<m_strName<<endl<<"年龄: "<<m_nAge<<endl<<"性别: "<<m_strSex<<endl;
}
int main()
{
Kid ckid(10,"rookie_j","男");
ckid.showKid();

Kid *cptr = new Kid(10,"rookie_j","女");
cptr->showKid();

//delete cptr;这行语句去掉,依然错误.

return 0;
}

调试程序的时候,前面都正常的,就是调试到return 0;时报错
[解决办法]

//delete []m_strName;
//delete []m_strSex;注视掉。   delete和new对应

[解决办法]
当定义ckid并没有new.ckid使用结束时,会自动调用析构函数。
就是你没有new,就delete。当然会出错!
[解决办法]
那问题就应该处在你的析构函数中

Kid::~Kid()
{
    cout<<"dispose object kid"<<endl;
    delete []m_strName;
    delete []m_strSex;
}

[解决办法]

#include <iostream>
using namespace std;

class Kid
{
private:
int m_nAge;
char *m_strName;
char *m_strSex;

public:
Kid(int age,char *name,char *sex);
~Kid();
void showKid();
};
Kid::Kid(int age,char *name,char *sex)
{
Kid::m_nAge = age;
Kid::m_strName = name;
Kid::m_strSex = sex;
}
Kid::~Kid()
{
cout<<"dispose object kid"<<endl;
//delete []m_strName;
//delete []m_strSex;
}
void Kid::showKid()
{
cout<<"姓名: "<<m_strName<<endl<<"年龄: "<<m_nAge<<endl<<"性别: "<<m_strSex<<endl;
}
int main()
{
Kid ckid(10,"rookie_j","男");
ckid.showKid();

Kid *cptr = new Kid(10,"rookie_j","女");
cptr->showKid();

delete cptr;
return 0;
}


[解决办法]
m_strName和m_strSex根本就没new,你去delete显然要报错,new和delete必须成对出现

热点排行