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跑一次。