2016-03-04 39 views
0

這是我的第一篇文章,所以要溫柔:d的getText()memoryleak

我剛開始這個工作,我的第一個任務是找到我做到了泄漏,由註釋指出。 我點擊控制的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; 
} 
+3

你能分享'GetText()'的代碼嗎? –

+0

歡迎。首先,目前還不清楚,您在這裏使用的是什麼框架或庫,RadStudio?你有'free'和'delete'兩個例外嗎? – sukhmel

+0

您是否有權在互聯網上發佈公司代碼? – BoBTFish

回答

1

好,我找到了答案,如果任何人有同樣的問題,解決的辦法是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; 
}