[英]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.