2

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

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

有任何想法吗?

4

2 回答 2

8

使用时new[]delete[]改成:

delete[] nw[w];

并记住delete[] nw;

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

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));
于 2012-12-04T17:14:56.423 回答
3

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

for (int w = 0; w < V; w++)
    delete[] nw[w];
delete[] nw;
于 2012-12-04T17:15:13.957 回答