所以我是一個非常大的新的C++,所以我敢肯定這是一個相對簡單的問題,但我有一個傳統的C++應用程序我試圖跟蹤堆腐敗問題並已將其被曝此功能:堆損壞錯誤與刪除[]
void LTrimZeros(CString *pstr)
{
char *psz1;
char *psz2;
if (pstr->GetLength() == 0)
return;
psz1 = new char[pstr->GetLength() + 1];
psz2 = psz1;
strcpy_s(psz2, strlen(psz2), (const char *) *pstr);
while (*psz2 == '0')
{
psz2++;
}
*pstr = psz2;
delete [] psz1;
return;
}
當它試圖刪除psz1
它拋出一個堆損壞錯誤。我再次對C++很陌生,所以我不想試圖解決這個問題,並不小心引入了內存泄漏,所以我想我會問專家。同樣的功能的替代解決方案也很好,因爲這個應用程序最初是用C++ 4編寫的,但現在升級到C++ 11(也簡單解釋了爲什麼這會導致堆損壞會有很大幫助)。
那是生產代碼嗎? – trojanfoe 2013-04-22 15:17:57
使用'std :: string'句號!擺脫所有的指針嘟嘟混雜。 – 2013-04-22 15:18:33
在whilte循環中,它是* psz2 =='0'?或者你的意思是* psz2 ==''0' – Ali 2013-04-22 15:19:16