【发布时间】:2018-01-08 13:23:34
【问题描述】:
我想知道 wchar_t* 指针在被 WM_SETTEXT 使用后会发生什么。
wchar_t* f = L"test1";
wchar_t* f2 = L"test2";
SendMessage(hWndEdit1, WM_SETTEXT, 0, (LPARAM)f);
// after some operations
SendMessage(hWndEdit1, WM_SETTEXT, 0, (LPARAM)f2);
delete f; // crashes
为什么delete f;会崩溃?
【问题讨论】:
-
为什么你认为你可以删除一些从未有过的东西?
-
你
delete你new,和delete[]你new[]。如果你还没有使用new或new[]分配任何东西,那么你不应该使用delete或delete[]它。 -
你也应该避免丢弃
const,即使你的编译器试图让你这样做。像L"test1"这样的文字是const,所以f和f2也应该是const。 -
当您通过
WM_SETTEXT消息传递指针时,系统会复制内容。SendMessage调用返回后,您可以立即处理指针。在这种情况下,您持有一个指向字符数组的指针。生命周期由编译器控制;你不需要做任何事情来清理。