我遇到了一个很奇怪的问题。我的程序从服务器读取一些UTF-8内容到char
缓冲区。然后我使用函数MultiByteToWideChar()
将这个char
缓冲区转换为LPWSTR
。之后,我创建一个线程来显示包含服务器响应的MessageBox。
这是我编辑代码:
function checkMessages()
{
// some code...
CreateThread(NULL, 0, &CreateMessageBox, lpszText, 0, NULL);
// some code...
delete[] lpszText; // this causes the error!!
}
DWORD WINAPI CreateMessageBox(LPVOID lpParam)
{
MessageBoxW(
NULL,
(LPCWSTR)lpParam,
L"You received a message!",
MB_TOPMOST
);
return 0;
}
问题是有时MessageBox的第一个字符或第一个单词被更改为任何其他符号。有时消息显示正确,有时不显示…
你知道这种奇怪行为的原因是什么吗?
编辑:在上面的编辑代码示例中,我已经添加了错误生成代码行。感谢所有帮助我找到错误的评论!
为了"完成"这个问题,我将回答它。
显示在我的问题代码样本这部分delete[] lpszText;
导致的错误。当创建的线程试图访问变量时,它似乎几乎同时清除了变量。我去掉了线,一切都很好!
感谢那些指引我正确方向的评论者!