よくわからないところでエラーが出る
これこれ。
// 0-5 で切り替え
#define SW 0
// WM_PAINT メッセージを受け取った時に実行される関数
// その他の部分は省略
void OnPaint(HWND hWnd)
{
HDC hdc;
PAINTSTRUCT pt;
TEXTMETRIC tm;
int len=0, line = 0;
int x = 10;
int y = 10;
#if SW == 0
LPSTR lpStr = TEXT(" _\n\n"); // パターン 0 : これだと駄目
#elif SW == 1
LPSTR lpStr = TEXT(" .\n\n"); // パターン 1 : これならいける
#elif SW == 2
LPSTR lpStr = TEXT(" _\n"); // パターン 2 : これでもいける
#elif SW == 3
LPSTR lpStr = TEXT(" _\n\n"); // パターン 3 : これすらいける
#elif SW == 4
LPSTR lpStr = TEXT(" _\n\n"); // パターン 4 : もちろんこれも
#else
LPSTR lpStr = TEXT("\n\n _"); // パターン 5 : ついでにこれも
#endif
hdc = BeginPaint(hWnd, &pt);
for(int i=0; true; i++) {
if(lpStr[i] == '\n' || lpStr[i] == NULL) {
LPSTR text = new char[sizeof(lpStr)];
wsprintf(text, "%s", lpStr +i -len);
text[len] = NULL;
GetTextMetrics(hdc, &tm);
TextOut(hdc, x, y +tm.tmHeight *line, text, len);
#if SW == 0
MessageBox(NULL, TEXT("ここまでは来るよ"), TEXT("NEST :: laboratory"), MB_OK);
#endif
delete text; // ←ここでエラーが出る
#if SW == 0
MessageBox(NULL, TEXT("ここまでは来ないよ"), TEXT("NEST :: laboratory"), MB_OK);
#endif
len = 0;
line++;
if(lpStr[i] == NULL)
break;
} else {
len++;
}
}
EndPaint(hWnd, &pt);
return;
}
API の TextOut()
だと一行しか描画できないので、文字列中の改行 '\n'
を自動的に判断して分割して出力する関数を自作中に出会った不具合。12 byte 目にアンダースコアだとかハイフンだとかを入れて、後ろで二つ以上改行すると、何故か delete
でエラーが発生する。なんだそりゃ。
あー関係ないけど、余分にバッファつくって対象文字列の後ろに '\n'
をくっつけるような処理にした方がシンプルな for
文になりそうな気がする。