std::map 糟糕的字符仅在发布模式下

Posted

技术标签:

【中文标题】std::map 糟糕的字符仅在发布模式下【英文标题】:std::map crappy chars only in release mode 【发布时间】:2010-12-14 16:28:16 【问题描述】:

我有一个 std::map 作为函数的参数,并且在调试模式 (VS2008) 中,映射具有正确的键和值,但是当我在 Release 中启动程序时,映射中有糟糕的字符!

代码转储:

    std::map<CString, CString> libVersions;
    ... // fill values 
    utilFunctions->Function(&libVersions))

    bool UtilityFunctions::Function(std::map<CString,CString> *dllMapData)
    
       ...
       map<CString,CString>::iterator it;

       for(it=dllMapData->begin(); it!=dllMapData->end(); it++)
         
          ...
       
       ...
    

任何想法为什么此代码在发布模式下不起作用???

感谢和问候

【问题讨论】:

你能贴出填充地图的代码吗?这是有趣的部分:) 尽可能切换到std::string而不是CString,使用引用而不是指针。 地图中的字符串看起来完全错误还是只有几个额外的字符?键和值都错了吗? 【参考方案1】:

我的猜测是,在发布时,您仍在针对调试 CRT 进行编译,并且没有定义 _DEBUG(反之亦然)。

【讨论】:

嗨!运行时库设置为 /MT 并且生成调试信息为否!在调试模式 /MTd 和 /DEBUG!在地图中,所有字符都很糟糕(不仅单个字符不同)!任何其他想法!迎接 leon22 @leon22:你在发布时有什么定义? (它在 C/C++->预处理器下) WIN32;NDEBUG;_WINDOWS;_VC80_UPGRADE=0x0600;_MBCS;$(NOINHERIT) 在发布和 WIN32;_DEBUG;_WINDOWS 在调试!迎接 leon22 @leon22: 嗯……那就毁了那个主意:(

以上是关于std::map 糟糕的字符仅在发布模式下的主要内容,如果未能解决你的问题,请参考以下文章

在字符串的 std::map 中查找编译错误,长

将终端设置为原始模式:仅在按下下一个键后才显示字符

仅在末尾有空格的字符串的正则表达式模式

一个跟踪插入顺序的 std::map ?

带有 std::any 值的 unordered_map 不能使用 any_cast 字符串

如何仅在调试模式下显示小部件 [重复]