You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

程序在wstringstream行崩溃,wmTranslation无对应msg该如何修复?

故障修复方案

根因分析

你遇到的崩溃是由std::map的[]运算符的隐式插入特性导致的:当查找的Msg值不在wmTranslation的预设key列表中时,[]会自动向map中插入一条{Msg, nullptr}的新记录,最终返回的translatedMessage是空指针。后续wstringstream尝试输出空C字符串时触发非法内存访问,直接导致程序崩溃。

修复代码

修改TranslateMessage函数的查找逻辑,使用find方法做无插入的安全查找即可:

const char* TranslateMessage(int Msg) {
    static std::map<int, const char*> wmTranslation = {
        {0, "WM_NULL" },
        {1, "WM_CREATE" },
        {2, "WM_DESTROY" },
        //... 剩余映射条目保持不变
    };

    auto iter = wmTranslation.find(Msg);
    if (iter != wmTranslation.end()) {
        return iter->second;
    }
    return "Unknown message";
}

补充说明

  • 修复后即使传入未定义的Msg值,也会返回合法的字符串常量指针,不会再触发空指针访问崩溃
  • 如果你的编译环境支持C++20,也可以用wmTranslation.contains(Msg)先判断key是否存在,再通过[]取值,但find是全版本兼容的最优方案

内容的提问来源于stack exchange,提问作者user16872085

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 05:18:00