2017-05-28 81 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