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跑一次。
一个很弱智的错误
代码如下:
_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跑一次。
本文介绍了一个关于VarFormat函数不正确使用的例子,指出如果在调用VarFormat前自行分配BSTR内存会导致内存泄漏的问题,并提供了正确的解决方案。
1049

被折叠的 条评论
为什么被折叠?



