次のコードは、デバッガーがdelete[]
オペレーターにヒットするたびにヒープの破損を引き起こしているようです。ヘッダーファイルでとして定義されextern
、メインの.cppファイルのグローバルスコープで宣言された構造体のグローバル配列を削除しようとしています。
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CREATE:
{
int main_win_x, main_win_y;
tiles_horiz = 10; //temp code
tiles_vert = 10; //temp code
num_mines = 5; //temp code
main_win_x = (tiles_horiz * 22) + 20;
main_win_y = (tiles_vert * 22) + 20;
MoveWindow(hwnd, 100, 100, main_win_x, main_win_y, TRUE);
tiles_total = (tiles_horiz * tiles_vert);
tile_array = new tile[tiles_total];
SetupPlayField();
DrawInitTiles(hwnd);
}
break;
case WM_SIZE:
{
}
break;
case WM_CLOSE:
delete[] tile_array;
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
私はここ数日、フォーラムでさまざまなヒープ破損のトピックを検索しましたが、これまでのところ、さまざまなことを試してみました。
ある人は、プログラムがヒットするまでに、私の配列tile_arrayへのポインタが変更された可能性があると提案しましたdelete[]
。しかし、私はこれを数回チェックしましたが、ポインターと配列の最初の要素の両方のアドレスは同じままです。
他の人の投稿からの他のフォーラムの回答は、通常、配列を複数回削除する可能性があることを示唆していますが、これまでのところ、delete[]
演算子がその特定の配列に使用されるのはこれだけです。