错误释放缓冲

问题描述:

我的代码时:错误释放缓冲

wchar_t buffer[64]; 

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

free(buffer); // <-- crashes 

的代码工作正常时不释放缓冲区,但是当崩溃免费(缓冲区)被使用。

这是行必要的,如果没有,为什么不呢?使用后是否需要释放内存?

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