Double free or corruption when using destructor
本问题已经有最佳答案,请猛点这里访问。
在下面的代码中,当我添加用箭头指定的行时出错:
Error in `./a.out': double free or corruption (fasttop):
0x00000000007a7030 * Aborted (core dumped)
号
如果我不使用析构函数,代码就可以工作。知道吗?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include<iostream> #include<vector> struct Element { int *vtx; ~Element () { delete [] vtx; } }; int main () { Element *elm = new Element [2]; elm[0].vtx = new int [2]; // <----- adding this gives error std::vector <Element> vec; vec.push_back (elm[0]); vec.push_back (elm[0]); return 0; } |
将
当
如果你想避免这样的错误,请看三条规则。
这是因为在向量中推送元素时会复制元素,但在复制时不会复制vtx,所以在main()的末尾,您将有三个元素指向同一个vtx。当程序终止时,它们三个都将尝试删除相同的int数组。