2012-07-11 173 views
0

我有两个线程在程序中运行。 它们是使用boost :: thread创建的。奇怪的内存泄漏C++与Eigen和boost ::线程

这两个线程在内存方面不共享任何东西。它们之间没有共享数据结构或对象。

现在第二个线程使用一个类作为私有成员有很多特征双矩阵。 我确保矩阵使用特征指令EIGEN_MAKE_ALIGNED_OPERATOR_NEW等对齐

当第一个线程正在运行时,第二个类的矩阵上的元素将被覆盖。 我通过检查检查过,因为应该是小数的元素突然变成了整数。 当第一个线程没有运行时,第二个线程没有问题,它的Eigen成员具有正确的值。

再次: 1)两个线程不共享数据结构。 2)程序运行时没有分段错误信息或类似的错误信息。 3)任何建议如何保护第二线程的内存或如何跟踪内存是如何被侵犯?

预先感谢您。我很抱歉,我没有发布代码,但它是巨大的。 让我知道你是否希望我发布代码中的特定内容。

+0

这不是内存泄漏。内存泄漏是指分配的内存/对象,而不是释放/删除。这听起来像第一个线程通过伪指针引用内存。这通常发生在一个对象被删除时,但该程序保持一个去活的指针。 – deemer 2012-07-18 19:56:06

回答

0

您可能需要调试工具,如Mac的mallocguard或Linux的Electric Fence。

这些工作是在分配标记为无法访问的虚拟内存之前添加“保护页”。当内存被释放时,它也被标记为不可访问。如果程序尝试访问它不应该访问的内存,修改后的分配器将确保它立即崩溃,以便调试器有望突出显示导致损坏的代码行。请注意,这可能会消耗大量内存,因此您可能需要一个能够再现损坏的小型数据集。