0

私のコード:

wchar_t buffer[64];

wsprintf(buffer, L"%d, %d, %d", x, y, z);
SendMessage(hwndEdit, WM_SETTEXT, NULL, (LPARAM)buffer);

free(buffer); // <-- crashes

コードは、バッファを解放しない場合は問題なく動作しますが、free(buffer) を使用するとクラッシュします。

この行は必要ですか? そうでない場合は、なぜですか? 使用後にメモリを解放する必要はありませんか?

4

1 に答える 1

3

bufferヒープではなくスタックに割り当てられます。自分で割り当てる必要はありませんfree

buffer(C) または (C++)を使用して動的に作成される場合は、(C )mallocまたはnew(C++) が必要です。動的配列はヒープ上に作成されます。静的配列 (コンパイル時に既知のサイズ) がスタックに割り当てられます。freedelete

于 2013-04-24T01:55:39.313 に答える