消息框第一个字符或单词错误



我遇到了一个很奇怪的问题。我的程序从服务器读取一些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;导致的错误。当创建的线程试图访问变量时,它似乎几乎同时清除了变量。我去掉了线,一切都很好!

感谢那些指引我正确方向的评论者!

最新更新