0

我的代码:

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) 时会崩溃。

这条线有必要吗,如果没有,为什么不呢?用完后不需要释放内存吗?

4

1 回答 1

3

分配在堆栈上,而buffer不是在堆上,您不需要free自己分配。

如果buffer是使用malloc(在 C 中)或new(在 C++ 中)动态创建的,则需要free(在 C 中)或delete(在 C++ 中)。动态数组是在堆上创建的。静态数组(大小在编译时已知)在堆栈上分配。

于 2013-04-24T01:55:39.313 回答