在一个线程中新建并在另一个线程中删除,不允许?

Mob*_*erg 6 c++ multithreading

我正在从一个com-port读取数据.由于我不知道数据何时到来,我正在连续阅读一个帖子.

当我读取足够的字节数时,我让主线程通过发布带有指向字符串的指针的消息来了解这一点:

msg[i] = '\0';
completeMsg = new char[i];
strcpy(completeMsg, msg);
PostMessage(hDlg, BT_MSG, NULL, (LPARAM) completeMsg);
i = 0;
Run Code Online (Sandbox Code Playgroud)

主线程对此消息的响应是:

case BT_MSG:
{
    char* msg = (char*) lParam;
    ShowMsg(msg);
    delete [] msg;
    break;
}
Run Code Online (Sandbox Code Playgroud)

但看起来不允许在此线程中删除,因为当我执行删除行时出现此错误:

Windows已在SPO.exe中触发断点.

这可能是由于堆的损坏,这表明SPO.exe或它已加载的任何DLL中的错误.

这也可能是由于用户在SPO.exe具有焦点时按下F12.

输出窗口可能包含更多诊断信息.

我应该使用一些全局变量还是发回消息让read-thread处理删除?它没有消息循环atm所以我宁愿不为此添加一个.

Ant*_*ams 4

如果您链接到编译器的多线程运行时库,您应该能够new在一个线程和另一个线程中使用。delete

然而,看起来你确实有缓冲区溢出。msg您以null 结尾msg[i]=0,但只分配i字节 --- 您可能需要new char[i+1]