2013-04-24 5 views
0

Моего кода:Ошибка при освобождении буфера

wchar_t buffer[64]; 

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

free(buffer); // <-- crashes 

код работает отлично, когда НЕ освобождая буфер, однако падает, когда свободный (буфер) используются.

Эта линия необходима, если нет, то почему бы и нет? Разве нет необходимости освобождать память после ее использования?

ответ

3

buffer размещается на стеке, а не на куче, вам не нужно free его самостоятельно.

Если buffer создается динамически с помощью malloc (в C) или new (в C++), вам нужно free (в C) или delete (в C++). Динамические массивы создаются в куче. статические массивы (размер, известный во время компиляции) выделяются в стеке.

+0

Я вижу, поэтому, когда я должен освободить буфер? Как узнать, выделен ли буфер в стеке или нет? – ChaseTheSun

+0

@ChaseTheSun посмотреть мой пост обновления? – taocp

+0

@ChaseTheSun Если вы _explicitly_ выделяете буфер, например. 'malloc' или аналогичную функцию, тогда вам нужно освободить его. Переменные в стеке полностью обрабатываются компилятором. –

Смежные вопросы