Shi*_*bli 5 c++ free destructor corruption
在下面的代码中,当我添加用箭头指定的行时给出错误:
"./a.out"出错:双重释放或损坏(fasttop):0x00000000007a7030 *已中止(核心转储)
如果我不使用析构函数,代码可以工作.任何的想法?
#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;
}
Run Code Online (Sandbox Code Playgroud)
这是因为当您将元素推入向量时,您会复制它,但 vtx 在复制时不会重复,因此在 main() 结束时,您将拥有三个指向同一个 vtx 的元素。当程序终止时,它们三个都会尝试删除同一个 int 数组。
| 归档时间: |
|
| 查看次数: |
4653 次 |
| 最近记录: |