【发布时间】:2014-06-26 18:22:39
【问题描述】:
在下面的代码中,当我添加用箭头指定的行时会出错:
`./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;
}
【问题讨论】:
-
@juanchopanza,我不确定 - 这是在问一个问题,“遵循三法则”(或现在,零法则)是一个答案,而不是关于三法则的答案是(因为 OP 在询问之前没有听到这个词)。
-
如果不进行大修,这段代码就无法正常工作。最简单的解决方案是将
vtx更改为std::vector<int>并去掉析构函数。即使是复制构造函数也无法按原样帮助您。 -
@Griwes 副本中的信息将回答这个问题。我只是在遵循惯例,但如果这不正确,我很乐意删除近距离投票。
-
@juanchopanza,我只是想知道我选择的被骗者是否比你选择的更正确。
标签: c++ free destructor corruption