VarFormat的不正确使用导致内存泄漏
一个很弱智的错误
代码如下:
_variant_t var(dblValue);
CString sOut;
BSTR bstrOut = sOut.AllocSysString();
::VarFormat(&var, L"0.#########", 0, 0, VAR_FORMAT_NOSUBSTITUTE, &bstrOut);
sOut = bstrOut;
::SysFreeString(bstrOut);
错误:
VarFormat中的参数bstrOut是由函数内部Alloc的,不能在外部Alloc,否则会有内存泄漏。
BSTR bstrOut = sOut.AllocSysString();
改为
BSTR bstrOut = NULL;
其实上述错误用BondCheck是可以定位错误的,但我在这份旧代码里一直没有用BondCheck跑一次,
所以导致该问题跟踪了两天才查到错误。唉,看来以后改完代码,一定要用BondCheck跑一次。
相关文章
- 使用TWebBrowser时存在内存泄漏问题的解决方案(使用SetProcessWorkingSetSize函数,或者修改OleCtrls.pas源码解决问题)
- Android融云使用不当产生的内存泄露和BUG(匿名类回调导致Activity内存泄露)
- 精华阅读第 13 期 |常见的八种导致 APP 内存泄漏的问题
- android Context 持有导致的内存泄漏
- 了解MySQL的内存使用情况导致PHP(PDO)
- ConvertBSTRToString导致的内存泄漏
- ARC下会导致内存泄漏的情况
- 在iPhone上使用带有CoreText的某些字体的Unicode文本时内存泄漏
- JNI创建共享内存导致JVM terminated的问题解决(segfault,shared memory,内存越界,内存泄漏,共享内存)
- 使用_CRTDBG_LEAK_CHECK_DF检查VC程序的内存泄漏(转)