- 締切済み
エラー Run-Time Check Failure #2 - Stack around the variable 'ps' was corrupted.
五目並べのプログラムを作っているのですが、 下記2のサブルーチンを出る時に 下記1のようなランタイムエラーが どうしても出てしまいます。 原因が分からなく自分の力ではどうにもできないので、 どなたかアドバイスよろしくお願い致します。 記1 Run-Time Check Failure #2 - Stack around the variable 'ps' was corrupted. 記2 LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { int id, x, y; static int nTe = 0; PAINTSTRUCT ps; HDC hdc; char szBuf[64], szSashite[16]; static HMENU hMenu; switch (msg) { case WM_CREATE: hMenu = GetMenu(hWnd); break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); MyMakeBan(hdc); MyStoneDraw(hdc); if (bSente) strcpy_s(szSashite, "先手●"); else strcpy_s(szSashite, "後手○"); wsprintf((LPWSTR)szBuf, TEXT("差し手 = %s"), szSashite); TextOut(hdc, 30, SHUI + KANKAKU * 14 + 30, (LPCWSTR)szBuf, strlen(szBuf)); wsprintf((LPWSTR)szBuf, TEXT("第 %02d 手終了 現在 %02d 手目待ち"), nTe, nTe + 1); TextOut(hdc, 30, SHUI + KANKAKU * 14 + 50, (LPCWSTR)szBuf, strlen(szBuf)); EndPaint(hWnd, &ps); break;
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Wr5
- ベストアンサー率53% (2173/4061)
wsprintf()のどちらかでバッファオーバーフローして、 めでたくpsを破壊されたようです。 デバッグ版でよかったですね…。 リリース版にすればランタイムチェックは走らないでしょう。 # 鼻から悪魔が出てきても文句言えませんが。 現実的な解決策は既に出ていますので。
- php504
- ベストアンサー率42% (926/2160)
文字列の種類を char wchar_t TCHAR のどれかに統一したほうがいいでしょう char szBuf[64], szSashite[16]; を TCHAR szBuf[64], szSashite[16]; に strcpy_s を _tcscpy_s に strlen を _tcslen など
エラーが無くなればいいと思ってる程度のキャストはやめなさい