前言: 最近项目出现了个比较严重的memory leak问题, 因为代码有很久的历史,之前也一直没有发现。最后跟踪定位发现可能是AfxEndThread结束线程导致的。
修改了线程结束方式后,问题就解决了。
案例:
UINT WorkingProc(LPVOID pParam)
{
CString strFolderPath = _T("...");
AfxEndThread(0);
return 0;
}
WorkingProc为线程函数,AfxEndThread函数执行后线程直接结束,不会调用strFolderPath的析构函数,导致内存泄露!
所以AfxEndThread不是安全的线程结束方法。
原文参考:https://blog.csdn.net/racebug2010/article/details/7433414
附上曾经总结的:https://blog.csdn.net/qq_35097289/article/details/80240702