c ++删除动态矩阵

时间:2012-12-04 17:12:10

标签: c++ memory-management dynamic matrix

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

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值失败。

有什么想法吗?

2 个答案:

答案 0 :(得分:6)

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

delete[] nw[w];

并记得delete[] nw;

请注意,数组中每个0的{​​{1}}的单独分配可以替换为:

int

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

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

答案 1 :(得分:2)

我认为您打算使用delete[],而不是delete

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