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 に答える