c++ MessageBox 第一个字符或单词错误
c++ MessageBox first character or word wrong
我遇到了一个非常奇怪的问题。我的程序从服务器读取一些 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 的第一个字符或第一个单词会更改为任何其他 symbol/s。消息有时显示正确,有时显示不正确...
您是否知道造成这种奇怪行为的原因是什么?
编辑:
在上面编辑过的代码示例中,我已经添加了错误生成代码行。
感谢所有帮助我找到错误的评论者!
"complete"这个问题我来回答一下
如我的问题代码示例所示,这部分 delete[] lpszText;
导致了错误。
似乎它在创建的线程尝试访问变量时几乎同时清除了变量。我删除了这条线,一切正常!
感谢那些指引我正确方向的评论者!
我遇到了一个非常奇怪的问题。我的程序从服务器读取一些 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 的第一个字符或第一个单词会更改为任何其他 symbol/s。消息有时显示正确,有时显示不正确...
您是否知道造成这种奇怪行为的原因是什么?
编辑: 在上面编辑过的代码示例中,我已经添加了错误生成代码行。 感谢所有帮助我找到错误的评论者!
"complete"这个问题我来回答一下
如我的问题代码示例所示,这部分 delete[] lpszText;
导致了错误。
似乎它在创建的线程尝试访问变量时几乎同时清除了变量。我删除了这条线,一切正常!
感谢那些指引我正确方向的评论者!