错误释放缓冲
问题描述:
我的代码时:错误释放缓冲
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
创建动态使用malloc
或new
(在C++),需要free
(在C)或delete
(在C++)。动态数组在堆上创建。静态数组(在编译时已知的大小)分配在堆栈上。
我明白了,所以当我应该释放一个缓冲区?我如何知道缓冲区是否分配在堆栈上? – ChaseTheSun 2013-04-24 01:56:54
@ChaseTheSun看到我更新后? – taocp 2013-04-24 01:57:49
@ChaseTheSun如果_explicitly_分配的缓冲区,例如用'malloc'或类似的函数,那么你需要释放它。编译器完全处理堆栈上的变量。 – 2013-04-24 01:58:00