GetText() 内存泄漏

GetText() memoryleak

这是我的第一个 post 所以要温柔 :D

我刚开始从事这项工作,我的首要任务是找到我所做的泄漏,评论指出了这一点。 我控制点击的 gettext() 并且我得到

virtual System::WideChar * __fastcall GetText(void); 

我添加了 5 个额外的 pwide 并且泄漏增加了(任务主机中的内存使用量增加了 1000)。

我试过删除和释放,但出现异常。有人对如何堵漏有任何建议吗?

这是我的代码:

UnicodeString CReportManager::GetFinalHTML()
{
UnicodeString ret = "";
ret = "<Reports>";

if( ErrorHTML->Count )
{
    ret += "<Errors>" + UnicodeString(ErrorHTML->GetText()) + "</Errors>";
}

//System::WideChar *pWide= ReportHTML->GetText();
//System::WideChar *pWide4= ReportHTML->GetText();
//System::WideChar *pWide1= ReportHTML->GetText();
//System::WideChar *pWide2= ReportHTML->GetText();
//System::WideChar *pWide3= ReportHTML->GetText();
    //delete pWide;
   //   free(pWide);
    //ret +=pWide;
ret += ReportHTML->GetText();          //leak here
ret += "</Reports>";

#ifdef _DEBUG
ReportHTML->SaveToFile("C:\debug.xml");
#endif

delete ReportHTML;
delete ErrorHTML;

ReportHTML = NULL;
ErrorHTML = NULL;


return ret;
}

好的我找到了答案,如果有人遇到同样的问题,解决方案是StrDispose(pWide); 我尝试了所有 4 个额外的 pWide,我的内存泄漏消失了:

UnicodeString CReportManager::GetFinalHTML()
{
    UnicodeString ret = "";
    ret = "<Reports>";

    if( ErrorHTML->Count )
    {
        ret += "<Errors>" + UnicodeString(ErrorHTML->GetText()) + "</Errors>";
    }

    System::WideChar *pWide= ReportHTML->GetText();

    //delete pWide;
    //free(pWide);
    ret +=pWide;
    StrDispose(pWide);

    //ret += ReportHTML->GetText();          //leak here
    ret += "</Reports>";

#ifdef _DEBUG
    ReportHTML->SaveToFile("C:\debug.xml");
#endif

    delete ReportHTML;
    delete ErrorHTML;

    ReportHTML = NULL;
    ErrorHTML = NULL;

    return ret;
}