VarFormat的不正确使用导致内存泄漏

时间:2021-04-21 16:45:55
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跑一次。