C++ 双重自由或由向量引起的腐败

C++ 双重自由或由向量引起的腐败,c++,memory,C++,Memory,我的一个类的析构函数(称为Distribution)抛出了一个双重释放或损坏错误。当我做回溯跟踪时,我得到: #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

我的一个类的析构函数(称为
Distribution
)抛出了一个
双重释放或损坏
错误。当我做回溯跟踪时,我得到:

#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
std::vector::~vector中的7 0x0000000000409212( 这=0x7FFFFF8F70) 在/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../../../../include/c++/4.6/bits/stl_vector.h:351 #分布中的8 0x00000000004032c5::~Distribution(this=0x7fffffff8f28) 在分发时。cpp:165 因此,当
分布
析构函数完成并尝试调用向量上的析构函数时,就会发生错误。它只是一个包含双精度的简单向量,不是指针或任何东西。
~vector
怎么会导致此错误


ETA:我不知道我能否在这里提供一个简单的代码示例。在我的代码中有好几个地方都发生了很多事情,我不知道哪些部分是相关的。评论表明这是一个内存损坏问题,所以我可以查找它。

没有代表性的MCVE,几乎不可能给出具体的答案

一般来说,最有可能的解释是,其他一些代码(可能在构造函数和析构函数调用对象之间调用,但可能在构建对象之前调用)调用了未定义的行为,例如通过骚扰指针

其影响可能相当间接。无法保证在发生错误操作时会立即发生崩溃。事实上,在没有明显症状的情况下发生故障是很常见的,它会导致不相关代码中行为的细微变化,最终这些细微变化中的一个会导致操作系统可以检测到的更大故障,然后它会终止您的程序


在您的例子中,一些这样的级联事件可能会干扰向量分配器的工作。这会导致向量的析构函数崩溃,尽管原因是完全不相关的代码。

仅仅因为程序在析构函数中崩溃并不意味着这就是错误所在。欢迎来到C++。您需要发布一个。vector的析构函数没有导致问题,代码中的其他内容是。不幸的是,您没有提供太多信息。通常情况下,内存问题直到稍后才会出现。如果您试图破坏某些内容,则在尝试释放内存之前可能不知道。那么这是否意味着存储向量的字段一定会被意外覆盖?这可能意味着。这可能意味着别的什么。写入无效地址的结果是未定义的,这意味着对结果没有定义的约束。谢谢Peter,您的评论告诉了我查找错误所需了解的内容。事实上,我是在覆盖存储向量的内存。