C++ 删除2D_数组错误

C++ 删除2D_数组错误,c++,arrays,pointers,delete-operator,C++,Arrays,Pointers,Delete Operator,我在这里尝试删除2D数组,但没有结果 我有这个结构: 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++) { recor

我在这里尝试删除2D数组,但没有结果

我有这个结构:

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');
    }
我得到这个错误:

Exception thrown at 0x50EE436B (ucrtbased.dll) in Test_10.exe: 0xC0000005: Access violation reading location 0xFDFDFDED. occurred.
对于(int i=ptr->Link_num;i>0;--i)
,循环从
ptr->Link_num
1
(即
[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;iLink_num;++i)
删除[]ptr->链接[i];
删除[]ptr->链接;

它不应该是
inti=ptr->Link_num-1
?为什么你要在
新建
删除
而不是简单地使用
std::vector
?吉尔·贝茨,你是对的!问题解决了,改变了这个条件。谢谢)πνταῥεῖ, 似乎解决了一个问题,还没有学会如何使用向量。谢谢)操作,没有注意到。问题解决了,谢谢)
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;