における異なる場所で動的2Dブール配列は、一見...私が/で初期化割り当てたサイズの高さ*幅二動的に割り当てられたブール値のアレイを有し、異なるアレイ
bool ** visited;
bool ** inQueue;
visited = new bool * [height];
inQueue = new bool * [height];
for (int i = 0; i < height; i++) {
visited[i] = new bool(width);
inQueue[i] = new bool(width);
}
for (int i = 0; i < height; i++)
for (int j = 0; j < width; j++) {
visited[i][j] = false;
inQueue[i][j] = false;
}
の値を変更に一つの値を変更します
そして、私のプログラムの最後に、私は
for (int i = 0; i < height; i++) {
delete [] visited[i];
delete [] inQueue[i];
}
delete [] visited;
delete [] inQueue;
...と、そのメモリをクリア。しかし、その間に、私は彼らがいない場合であってもの訪問0番目の列でさまざまな値がtrueになる奇妙な条件を得ます直接変更される。
この動作の例は以下のとおりです。
. . . . . . . . . . . X . . . . . 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 . . . . . . # . # . X X X . # . . 0 0 0 0 0 0 1 0 1 0 1 1 1 0 1 0 0 . . . . . . # . . # X X X X # . . 0 0 0 0 0 0 1 0 0 1 1 1 1 1 1 0 0 . . . . . . # . X X X X X X # . . 0 0 0 0 0 0 1 0 1 1 1 1 1 1 1 0 0 . . . . . . # # # # # X X X # . . 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 . # . . . . . . . . # X X X X @ . 0 1 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 . # . . . . . . . . # X X X X . . 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 . # . . . . . . . . # X X X . . . 0 1 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 . G # . . . # # # . # X X . # . . 0 0 1 0 0 0 1 1 1 0 1 1 1 0 1 0 0 . # . . . . . . . . . X . . . . . 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 . . . . . . . . . . # . . . . . . 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 . . . . . . . . . . . . . . . . . 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 . . . . . . . . . . . . . . . . . 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 . . . . . . . . . . . . . . . . . 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 . . . . . . # . . . . . . . # . . 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 . . . . . . # . . . . . . . # . . 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 . . . . . . # . . . . . . . # . . 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 [6][0] @ 205: 0 Added Eastern Pos: (16, 5) [6][0] @ 208: 1 [6][0] @ 210: 1 ...
は、これが私の出力です。ご覧のように、私の出力で205行目以降にラベルを付けたものは、visited [6] [0]の位置が真となり、東部の位置が追加されます。その変化をコードはここにある:
cout << "[6][0] @ 205: " << visited[6][0] << endl;
cout << "Added Eastern Pos: (" << (east % width) << ", " << (int)floor(east/width) << ")\n";
inQueue[(int)floor(east/width)][east % width] = true;
cout << "[6][0] @ 208: " << visited[6][0] << endl;
xVal.addToQueue(to_string(east % width));
具体3行目にI(上記ブロックに見られるように)直後次いでinQueueの値を変更し、[6]訪問[0]はTrueに変更されています。 、
(int型)床(東/幅)
は、実際に5である、と
東%幅
だから16であることに注意してください私には、訪問したものは何でも変わってしまうのは意味をなさない。これはプログラムの実行中に徐々に発生し、常に0番目の列の値が変更されます。
アイデア?
'bool(width)' - > 'bool [width]'? –
'new'を使った後は' delete [] 'ではなく' delete'を使うべきです!! – CIsForCookies
私はdelete []を使わないと誤った動作をします。メモリの面では、この文脈で間違っていると削除の上にdelete []を使うことの欠点は何でしょうか? –