2012-07-11 172 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。

這些工作是在分配標記爲無法訪問的虛擬內存之前添加「保護頁」。當內存被釋放時,它也被標記爲不可訪問。如果程序嘗試訪問它不應該訪問的內存,修改後的分配器將確保它立即崩潰,以便調試器有望突出顯示導致損壞的代碼行。請注意,這可能會消耗大量內存,因此您可能需要一個能夠再現損壞的小型數據集。