C++ 删除动态矩阵

c++ delete dynamic matrix

本文关键字:动态 删除 C++      更新时间:2023-10-16

我有这段代码来分配和初始化:

nw = new int*[V];
for (w = 0; w < V; w++) {
nw[w] = new int[K];
for (k = 0; k < K; k++) 
  nw[w][k] = 0;
}

这要释放内存:

if (nw) {
 for (int w = 0; w < V; w++) {  
  if (nw[w]) 
delete nw[w];      
}

程序编译并运行,但是,当它尝试释放内存时,失败。程序并不总是在相同的 w 值下失败。

有什么想法吗?

new[]使用 delete[] 时,请更改为:

delete[] nw[w];

并记得delete[] nw;.

请注意,数组中每个int的单独0赋值可以替换为:

nw[w] = new int[K](); // This value initializes the array, in this
                //^^     case sets all values to zero.

您可以避免使用 std::vector<std::vector<int>> 显式处理动态分配:

std::vector<std::vector<int>> nw(V, std::vector<int>(K));

我认为你的意思是使用delete[],而不是delete

for (int w = 0; w < V; w++)
    delete[] nw[w];
delete[] nw;