2016-03-04 2 views
0

Это мой первый пост так нежен: DGetText() 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

Ok я нашел ответ, если кто-то имеет такую ​​же проблему, решение 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; 
}