读书人

运行到赋值函数程序就死?该怎么解决

发布时间: 2012-04-12 15:46:35 作者: rapoo

运行到赋值函数程序就死??

C/C++ code
#include <string>#include <iostream>using namespace std;class CL{    public:    int ival;    int *ip;    CL(int *ip,int ival):ip(ip),ival(ival){    }    CL():ival(0),ip(0){    }    CL(const CL &cl){        this->ival=cl.ival;        *ip=*(cl.ip);    }    CL &operator=(const CL& cl){        ival=cl.ival;        *ip=*(cl.ip);        return *this;    }};int main(){    int i_var=10;    int i_p=1;    CL cl1(&i_p,i_var);    //CL cl2=cl1;    CL cl2;//使用默认构造函数进行初始化。    cl2=cl1;[color=#FF0000]//运行到这里就死,为什么啊????[/color]    cl1.ival=99;    *(cl1.ip)=999;    cout<<"******cl1******"<<endl;    cout<<cl1.ival<<endl;    cout<<*(cl1.ip)<<endl;    cout<<"***************"<<endl;    cout<<endl;    cout<<"******cl2******"<<endl;    cout<<cl2.ival<<endl;    cout<<*(cl2.ip)<<endl;    cout<<"***************"<<endl;    return 0;}


[解决办法]
无参构造中,指针在初始化列表中被赋NUll(0),即CL2中含NULL指针成员。 拷贝赋值时,将1赋给一个NULL指针的目标。
对NULL指针取目标应该是错误点
[解决办法]
探讨

引用:

cl2=cl1;[color=#FF0000]这一行怎么能够通过编译的?

显式定义了自己的=赋值操作符,为什么不行???

[解决办法]
探讨
引用:

无参构造中,指针在初始化列表中被赋NUll(0),即CL2中含NULL指针成员。 拷贝赋值时,将1赋给一个NULL指针的目标。
对NULL指针取目标应该是错误点

错误的原因知道了,但是使用ip=cl.ip两个对象的ip指向的同一段内存,为什么对cl1的修改不会影响到cl2呢?
难道是只有动态分配的内存在复制或拷贝函数时才有可能分配的是同一块内存!!!

读书人网 >C++

热点推荐