我有一个非常奇怪的问题。我的程序从服务器读取一些UTF-8内容到char
缓冲区。然后,我使用函数char
将此LPWSTR
缓冲区转换为MultiByteToWideChar()
。在此之后,我创建一个线程来显示一个包含服务器响应的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的第一个字符或第一个字被更改为任何其他符号。有时消息显示正确,有时不显示......
你有什么想法可能是造成这种奇怪行为的原因吗?
修改 : 在上面编辑的代码示例中,我已经添加了生成错误的代码行。 感谢所有帮助我找到错误的评论者!
答案 0 :(得分:0)
要“完成”这个问题我会回答。
如我的问题代码示例所示,此部分delete[] lpszText;
导致了错误。
它似乎在创建的线程试图访问它时几乎同时清除变量。我删除了线,一切正常!
感谢评论者指导我朝着正确的方向前进!