【发布时间】:2016-06-11 23:37:41
【问题描述】:
我的一个类(称为Distribution)的析构函数抛出double free or corruption 错误。当我进行回溯时,我得到了这个:
#7 0x0000000000409212 in std::vector<double, std::allocator<double> >::~vector (
this=0x7fffffff8f70)
at /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/stl_vector.h:351
#8 0x00000000004032c5 in Distribution::~Distribution (this=0x7fffffff8f28)
at Distribution.cpp:165
所以当Distribution 析构函数完成并尝试在向量上调用析构函数时会发生错误。它只是一个包含双精度的简单向量,而不是指针或任何东西。 ~vector 怎么会导致这个错误?
ETA:我不知道我可以在这里提供一个简短的代码示例。它发生在我的代码中的几个地方,所有地方都发生了很多事情,我不太清楚哪些部分是相关的。评论表明这是内存损坏问题,因此我可以查找。
【问题讨论】:
-
程序在析构函数中崩溃并不意味着这就是错误所在。欢迎使用 C++。您需要发布minimal reproducible example。
-
vector 的析构函数不会导致问题,而是代码中的其他内容。很遗憾,您没有提供太多信息。
-
通常内存问题直到稍后才会出现。如果你设法破坏了一些你可能不知道的东西,直到你尝试释放内存。