读书人

上面的程序哪有出错了

发布时间: 2012-07-29 15:26:14 作者: rapoo

下面的程序哪有出错了?

C/C++ code
#include <iostream>#include <cstring>#include <vector>using namespace std;class CDemo{public:        CDemo() : str(NULL){            };    ~CDemo(){        if(str) delete[] str;    }    char *str;};int main(){    CDemo dl;    dl.str = new char[32];    strcpy(dl.str, "wyphao");        vector<CDemo> *a1 = new vector<CDemo>();    a1->push_back(dl);    delete a1;    return 0;}

如题。

[解决办法]
好久没见过这么别扭的程序了
指针指向一个空间,复制对象时复制指针,一个对象析构时删除空间,另一个对象析构时删除已经被删除的空间——出错

简单地说,谁new,谁delete
既然CDemo这个类没有自己new出str,那么它也没资格delete掉str
[解决办法]
a1->push_back(dl);

你没有显示写出CDemo的拷贝构造函数,默认的是浅拷贝,也就是push_back插入的时候拷贝元素不会拷贝到新的内

存空间

程序结束时 容器元素再一次释放 造成了多次delete

读书人网 >C++

热点推荐