我的代码:
wchar_t buffer[64];
wsprintf(buffer, L"%d, %d, %d", x, y, z);
SendMessage(hwndEdit, WM_SETTEXT, NULL, (LPARAM)buffer);
free(buffer); // <-- crashes
代码在不释放缓冲区时工作正常,但在使用空闲(缓冲区)时会崩溃。
这条线是否必要,如果没有,为什么不呢?使用后是不是需要释放内存?
答案 0 :(得分:3)
buffer
是在堆栈上分配的,而不是在堆上,你不需要自己free
。
如果使用buffer
(在C中)或malloc
(在C ++中)动态创建new
,则需要free
(在C中)或delete
(用C ++编写)动态数组在堆上创建。静态数组(编译时已知的大小)在堆栈上分配。