作者icetofux ()
看板C_and_CPP
標題[問題] 使用new配置陣列後delete出現錯誤
時間Tue Dec 20 17:19:02 2011
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
GCC
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
我在一個class的函式成員中動態配至一個陣列來用,程式卻在執行到delete時,
windows跳出發生問題必須關閉的視窗。
餵入的資料(Input):
預期的正確結果(Expected Output):
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版)
int MyClass::Save()
{
char *DataSpace;
unsigned int Length;
Length = 0x40000;
// Create array
DataSpace = new char[Length];
system("PAUSE");
// Try to write data to array
DataSpace[0] = 0x00;
system("PAUSE");
// Delete array
delete [] DataSpace;
system("PAUSE");
return (0);
}
補充說明(Supplement):
在程式中class有多個成員函式(如Save()、Lode()...)用了類似的方式創造一個暫時
的陣列空間,並且都在離開函式時釋放記憶體空間,應該是不會產生重複new/delete
的問題。
如果main中只呼叫了xxx.Save()不會有問題,但如果先呼叫xxx.Load()再呼叫xxx.Save()
則會跳出錯誤。
請問如果問題發生在delete階段,要怎麼判斷是哪個環節出了問題呢?debug好像看不出
什麼有用的資訊。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.72.212.239
※ 編輯: icetofux 來自: 211.72.212.239 (12/20 17:48)
→ anotherday:還是得看程式碼才看的出來 12/20 18:22
→ icetofux:我發現問題了,先前的函式呼叫不小心操作到配置的空間 12/20 18:27
→ icetofux:之外,當下沒爆,接下來呼叫Save就爆了,好蠢... 12/20 18:28