Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我的代码:
wchar_t buffer[64]; wsprintf(buffer, L"%d, %d, %d", x, y, z); SendMessage(hwndEdit, WM_SETTEXT, NULL, (LPARAM)buffer); free(buffer); // <-- crashes
该代码在不释放缓冲区时工作正常,但是在使用 free(buffer) 时会崩溃。
这条线有必要吗,如果没有,为什么不呢?用完后不需要释放内存吗?
分配在堆栈上,而buffer不是在堆上,您不需要free自己分配。
buffer
free
如果buffer是使用malloc(在 C 中)或new(在 C++ 中)动态创建的,则需要free(在 C 中)或delete(在 C++ 中)。动态数组是在堆上创建的。静态数组(大小在编译时已知)在堆栈上分配。
malloc
new
delete