簡體   English   中英

線程中的MFC TRY CATCH宏導致內存泄漏

[英]MFC TRY CATCH macro in thread causes memory leak

我在函數中有一個簡單的try catch塊:

TRY
{
    ; // Doesn't matter what is in the try block, I got memory leak just for a simple semicolon!
}
CATCH( COleException, e )
{
    return e->m_sc;
}
END_CATCH

該代碼始終在新線程中運行(使用_beginthread),線程可能創建多次,但是線程的壽命很短。

使用MFC TRY / CATCH宏會導致大量內存泄漏。 卸下嘗試鎖,立即修復泄漏。

使用vs 2015診斷工具,我比較了內存​​快照,發現泄漏類型為:_AFX_THREAD_STATE和CThreadData

使用try / catch mfc宏導致此泄漏的原因是什么?

如果CATCH塊中有返回值,則END_CATCH將不會刪除COleException對象。

最好還是放棄TRY / CATCH宏:

try 
{
    ...
}
catch (COleException* pe) 
{
    SCODE sc = pe->m_sc;
    pe->Delete();
    return sc;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM