MessageBox线程问题

时间:2013-10-09 20:03:28

标签: c++ multithreading variables visual-c++ messagebox

我在使用此代码的线程中启动了Messagebox的奇怪行为:

DWORD WINAPI CreateMessageBox(LPVOID lpParam) {
    MessageBoxA(NULL, (char*)lpParam, "", MB_OK);
    return 0;
}
std::string msg = "Hello World";
CreateThread(NULL, 0, &CreateMessageBox, msg.c_str(), 0, NULL);

虽然此代码正常运行:

DWORD WINAPI CreateMessageBox(LPVOID lpParam) {
    MessageBoxA(NULL, (char*)lpParam, "", MB_OK);
    return 0;
}
CreateThread(NULL, 0, &CreateMessageBox, "Hello World", 0, NULL);

我无法理解为什么它不是变量时工作,如果我将其更改为变量,则显示空MessageBox,但我期待“Hello World!。

1 个答案:

答案 0 :(得分:0)

msg是一个局部变量(在堆栈上分配),只要包含该代码的函数/方法返回,它就会被销毁。因此,线程将在使用lparam时访问无效内存。

有些解决方案可能是:

1.) declare 'msg' as static - probably not a good idea
2.) allocate 'msg' on heap, but then you will have to destroy it somewhere
3.) make 'msg' a member variable