0

我有两个线程在一个程序中运行。它们是使用 boost::thread 创建的。

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

现在第二个线程使用了一个类,该类具有许多本征双矩阵作为私有成员。我确保使用 Eigen 指令 EIGEN_MAKE_ALIGNED_OPERATOR_NEW 等对齐矩阵

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

同样:1)两个线程不共享数据结构。2)程序运行时没有分段错误消息或类似的东西或一些错误消息。3)任何建议如何保护第二个线程的内存或如何跟踪内存是如何被违反的?

先感谢您。我真的很抱歉我没有发布代码,但它是巨大的。如果您希望我发布代码中的特定内容,请告诉我。

4

1 回答 1

0

你可能需要一个调试工具,比如 Mac 的 mallocguard 或 Linux 的 Electric Fence。

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

于 2012-07-18T20:06:34.503 回答