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;
}
这是我的第一个 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;
}