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

上面的程序哪有出错了

2012-07-29 
下面的程序哪有出错了?C/C++ code#include iostream#include cstring#include vectorusing namespac

下面的程序哪有出错了?

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

热点排行