【问题标题】:How do I deallocate this 2D array in C++? [duplicate]如何在 C++ 中释放这个二维数组? [复制]
【发布时间】:2025-12-06 06:40:02
【问题描述】:

我将如何取消分配使用此代码分配的 2D 指针数组:

board = new Node ** [r];

//creates a column for each element in the row
for(int i = 0; i < r; i++) {
    board [i] = new Node * [c];
}

这是一个 2D 指针数组,就我目前在析构函数中的内容而言,它指向 board = line....

Board 是一个 Node ***,应该是这样的。

【问题讨论】:

  • 您可能需要在发帖前进行研究
  • 我已经有了,没有任何答案可以回答我的问题,因为 valgrind 仍然会抛出错误。
  • 你为什么用***?这不再是一个二维数组。
  • 节点指针的二维数组。需要完成...曾经是 Node **,但后来我无法释放使用复制构造函数创建的节点。

标签: c++ arrays pointers memory


【解决方案1】:

你应该按照你分配它的相反顺序来释放它:

for(int i = 0; i < r; i++) {
    delete [] board[i];
}

delete [] board;

【讨论】:

  • Valgrind 还在抱怨……这就是为什么我很困惑……但是这里的其他人都必须粗鲁……O_O
  • @LucasMarzocco:如果 valgrind 仍在抱怨,那么导致问题的不是释放问题。尝试做一个只有上述分配和释放的小测试用例; valgrind 根本不会抱怨。然后慢慢添加代码的其他方面并在 valgrind 下检查。一旦你看到 valgrind 开始抱怨,那么你就知道是哪条线路导致了问题。