上面的程序哪有出错了
下面的程序哪有出错了?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