2013-04-24 153 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它。

(在C)如果buffer創建動態使用mallocnew(在C++),需要free(在C)或delete(在C++)。動態數組在堆上創建。靜態數組(在編譯時已知的大小)分配在堆棧上。

+0

我明白了,所以當我應該釋放一個緩衝區?我如何知道緩衝區是否分配在堆棧上? – ChaseTheSun 2013-04-24 01:56:54

+0

@ChaseTheSun看到我更新後? – taocp 2013-04-24 01:57:49

+0

@ChaseTheSun如果_explicitly_分配的緩衝區,例如用'malloc'或類似的函數,那麼你需要釋放它。編譯器完全處理堆棧上的變量。 – 2013-04-24 01:58:00