這裏堆損壞時是我的代碼:刪除字符串
std::string readString()
{
int strLen = Read<int>();
char* rawString = new char[strLen];
Read(rawString, strLen);
rawString[strLen] = '\0';
std::string retVal(rawString);
delete [] rawString;
return retVal;
}
第一行讀取字符串的長度。
第二行創建一個字符串長度爲
的新字符數組(字符串)第三行讀取字符串(從文件中讀取它)
第4行將NULL添加到最後。
第5行創建一個std ::字符串出c字符串。
第6行刪除c字符串(HEAP CORRUPTION HAPPENS HERE)
第7行返回字符串,但由於錯誤,它永遠不會到達這一點。
在第6行,我得到一個堆損壞錯誤: CRT檢測到應用程序在堆緩衝區結束後寫入內存。
我的問題可能很明顯,但爲什麼我得到堆腐敗?當我創建一個std :: string時,它應該複製該字符串,並且我應該安全地刪除該c字符串。
目前,我懷疑std :: string在刪除它後試圖訪問c字符串。
任何想法?
您在代碼中有'delete []',因此您的代碼很糟糕。使用'std :: vector'或其他東西,甚至直接讀入字符串。 – GManNickG 2010-11-18 21:30:42
@GMan:在我發佈之前甚至沒有看到您的評論:p它太簡單了,它也簡化了代碼... – 2010-11-19 07:44:16