C++ _com_错误::ErrorMessage将导致内存泄漏?

C++ _com_错误::ErrorMessage将导致内存泄漏?,c++,memory-leaks,ado,C++,Memory Leaks,Ado,我尝试使用VC++&ADO连接到sqlserver。并使用C++内存验证程序检查是否存在内存泄漏。以下是我的代码: ADODB::_ConnectionPtr Conn1; CoInitialize(NULL); // Trap any error/exception. try { // Create and Open Connection Object. Conn1.CreateInstance( __uuidof(

我尝试使用VC++&ADO连接到sqlserver。并使用C++内存验证程序检查是否存在内存泄漏。以下是我的代码:

    ADODB::_ConnectionPtr  Conn1;

    CoInitialize(NULL);

    // Trap any error/exception.
    try
    {
        // Create and Open Connection Object.
        Conn1.CreateInstance( __uuidof( ADODB::Connection) );
        Conn1->ConnectionString = _bstr_t(L"Provider=sqloledb;Data Source=MYPC;Integrated Security=SSPI;");
        Conn1->Open( _bstr_t(L""), _bstr_t(L""), _bstr_t(L""), -1 );
        Conn1->Execute(_bstr_t(_T("DROP TABLE UnexistingTable;")), NULL, ADODB::adCmdText | ADODB::adExecuteNoRecords);
        Conn1->Close();
    }
    catch(_com_error& e) 
    {
        CString strError = e.ErrorMessage();
    }

    CoUninitialize();

C++内存验证器将报告以下内存泄漏,这是由μCuxOrth::Error MeXeAGE()引起的:

但我查看了ErrorMessage上的文件,上面写着:

返回的字符串由FormatMessageAPI分配,并在销毁_com_error对象时释放


看来我的密码没有问题。我试图在_com_error::~_com_error析构函数中放置断点,但VS表示由于代码优化,无法将断点放置在那里。因此,我无法知道消息是否成功发布。

通常要正确调试,请使用
-o0-g
编译。使用valgrind检查内存泄漏。您可以尝试将异常捕获为常量引用:
catch(const\u com\u error&e)
@tedlynmo,您好,我尝试添加常量修饰符,但这会产生相同的结果。仍然存在内存泄漏。@Clonk,抱歉,valgrind似乎无法在WIndows上运行?@Clonk,目前我正在使用调试设置,我检查编译器/链接选项。它使用-od(禁用优化)。我找不到-g选项,这是什么意思?通常要正确调试,请使用
-o0-g
编译。使用valgrind检查内存泄漏。您可以尝试将异常捕获为常量引用:
catch(const\u com\u error&e)
@tedlynmo,您好,我尝试添加常量修饰符,但这会产生相同的结果。仍然存在内存泄漏。@Clonk,抱歉,valgrind似乎无法在WIndows上运行?@Clonk,目前我正在使用调试设置,我检查编译器/链接选项。它使用-od(禁用优化)。我找不到-g选项,这是什么意思?