2017-05-28 110 views
1

我想在這裏刪除沒有結果的2D數組。刪除2D_array錯誤

我有這樣的結構:

struct Node { 
char Object[32]; 
int Link_num; 
char **Links; 
Node *Next; 
}; 

在我動態創建二維數組的一個功能,如圖所示:

record->Links = new char*[record->Link_num]; 
    for (int i = 0; i < record->Link_num; i++) { 
     record->Links[i] = new char[16]; 
     cin.getline(record->Links[i], 16, '\n'); 
    } 

而現在,當我試圖刪除陣列中的一些刪除功能:

if (ptr->Link_num > 0) { 
     for (int i = ptr->Link_num; i > 0; --i) 
      delete[] ptr->Links[i]; 
     //delete[] ptr->Links; 
    } 

我得到這個錯誤:

Exception thrown at 0x50EE436B (ucrtbased.dll) in Test_10.exe: 0xC0000005: Access violation reading location 0xFDFDFDED. occurred. 
+0

它不應該是'INT I = ptr-> LINK_NUM - 1' ? –

+3

你爲什麼要搞亂'new'' delete'而不是簡單地使用'std :: vector '? –

+0

吉爾貝茨,你是對的!問題解決了改變這種情況。謝謝) πάνταῥεῖ似乎是解決問題的方法,但並未學會如何使用矢量。謝謝) – Taxon

回答

1

for (int i = ptr->Link_num; i > 0; --i),該循環從ptr->Link_num1(即, [ptr->Link_num, 0))。但陣列的範圍是[0, ptr->Link_num),它不包含ptr->Link_num。所以你要走出陣列的範圍。行爲是不確定的,你很「幸運」地得到錯誤。

將其更改爲

for (int i = ptr->Link_num - 1; i >= 0; --i) 
    delete[] ptr->Links[i]; 
delete[] ptr->Links; 

或(你不需要它循環以相反的順序)

for (int i = 0; i < ptr->Link_num; ++i) 
    delete[] ptr->Links[i]; 
delete[] ptr->Links; 
+0

Ops,沒注意那個。問題解決了,謝謝)) – Taxon