std :: map :: find(char*)在调试模式下无法在64位机器上运行

Azh*_*bal 1 c++ windows

我正面临一个有趣的局面,并希望与所有人分享.当然,如果有人可以提供帮助,我将不胜感激!

#include "stdafx.h"
#include <map>

#define DEF_NAME1   "NAME1" 
#define DEF_NAME2   "NAME2" 
#define DEF_NAME3   "NAME3" 
#define DEF_NAME4   "NAME4" 

struct TInfo
{
    const char * TName;
    const char * TArray1[100];
    const char * TArray2[100];
};

typedef std::map<const char*, TInfo*> TInfoMap;
typedef std::pair<const char*,TInfo*> TInfoPair;

static TInfoMap tinfomap;

TInfo TInfoArray[] =
{
{DEF_NAME1,{""}, {""}},
{DEF_NAME2,{""}, {""}},
{DEF_NAME3,{""}, {""}},
{DEF_NAME4,{""}, {""}}
};

TInfoMap* GetTInfoMap()
{

for (int i = 0; i < 3 ; i++ )
    tinfomap.insert(TInfoPair(TInfoArray[i].TName,&TInfoArray[i]));

return &tinfomap;
}


int _tmain(int argc, _TCHAR* argv[])
{
char *name="NAME3";

TInfo* ptr = new TInfo();

TInfoMap* map1 = GetTInfoMap(); 

if ( map1->find(name) == map1->end() )
    printf("Not found");
else
    printf("Found!");

return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在Windows 2003 Server 64bit上.我得到输出"发现!" 当我在发布模式下编译/运行此程序时,当我在调试模式下编译/运行此程序时输出为"未找到".

任何的想法?

问候,

Azher

dim*_*mba 6

尝试在地图中使用std :: string作为键.当您使用char*作为键时,map会比较char*的地址而不是您期望的内容.如果要使用char*作为键,则需要使用比较谓词将第三个参数实例化为模板.

这里调试和发布配置之间的区别可能解释了如何存储const字符串文字 - 相同或单独的存储用于相同的字符串

你并不孤单链接