Abd*_*oud 2 c++ constructor class dynamic
class name {
char *s;
int len;
public:
name(){ // Default constr.
s=NULL;
len =0;
}
//**************************************************
~name(){ // Destruct.
if (s!=NULL){
delete [] s;
s=NULL;
}
}
//*************************************************
name(const char * s1); // Constr.
char* getName(); //fcn get name
int getLen() ; // fcn get lenght
void setName(const char * s1); // fcn set name
};
void name::setName(const char * s1){
if (s!=NULL){
delete [] s;
s=NULL;
}
len = strlen(s1)+1;
s=new char [len]; // back***
strcpy(s,s1);
}
name::name(const char * s1){
if (s!=NULL){
delete [] s;
s=NULL;
}
len = strlen(s1)+1;
s=new char [len]; // back***
strcpy(s,s1);
}
char* name::getName(){
return s ;
}
int name::getLen(){
return strlen(s)+1 ;
}
int main()
{
char C[20];
cout << "Please enter a name: ";
cin >> C;
name AAA(C);
name BBB;
BBB.setName(C);
cout << "\nThe length of A(" << AAA.getName();
cout << ") is: \a" << AAA.getLen() << endl << endl;
cout << "\nThe length of B(" << BBB.getName();
cout << ") is: \a" << BBB.getLen() << endl << endl;
system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我运行代码时,类"BBB"执行成功,但"AAA"给我运行时错误!
错误:
test0.exe中0x651157aa(msvcr100d.dll)的未处理异常:0xC0000005:访问冲突读取位置0xccccccc0.
这里:
name::name(const char * s1){
if (s!=NULL){
Run Code Online (Sandbox Code Playgroud)
是坏事发生的地方.s还没有初始化,你正在比较它NULL.为什么你的印象是NULL最初的?这是未定义的行为.只是抛弃条件 - 这是构造对象的地方,所以就这样 - 构建它.
强制性C++建议 - 使用std::string.