【发布时间】:2021-12-29 13:01:51
【问题描述】:
如何正确删除双指针数组?当我尝试这段代码时,memcheck 告诉我“使用大小为 8 的未初始化值”和“大小为 4 的无效写入”。我不知道我哪里做错了。
struct Node
{
int value;
Node* next;
};
int main()
{
Node** doublePtrNode= new Node* [10];
for (unsigned int i = 0; i < 10; i++)
{
doublePtrNode[i]->value=i;
}
for (unsigned int i = 0; i < 10; i++)
{
delete doublePtrNode[i];
}
delete[] doublePtrNode;
return 0;
}
【问题讨论】:
-
您的问题是分配第二维而不是删除。这个问题应该有帮助:https://stackoverflow.com/questions/936687/how-do-i-declare-a-2d-array-in-c-using-new
-
你永远不会为数组
doublePtrNode(它们是指针)的元素赋值。 -
旁注:明确使用
new和delete,因为C++11 被认为是一种不好的做法。您应该使用std::vector,它将代表您进行适当的内存管理。在其他情况下,有std::unique_ptr和std::shared_ptr。