GetText() memoryleak

GetText() memoryleak

本文关键字:memoryleak GetText      更新时间:2023-10-16

这是我的第一篇文章,所以要温柔: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;
}