Strcmp生成核心转储

Strcmp生成核心转储,c,strncmp,C,Strncmp,所以我有一个std::unordered_映射,我想访问这个映射中存储的字符串。我想搜索地图中的所有单词,并与给定的单词进行比较。如果字符串相同,则继续执行If语句 { public: bool CheckFoo(const char* word); protected: typedef std::unordered_map<std::string, bool> word_map; word_map words_map; }; 问题是这些代码生成

所以我有一个std::unordered_映射,我想访问这个映射中存储的字符串。我想搜索地图中的所有单词,并与给定的单词进行比较。如果字符串相同,则继续执行If语句

{
public:    
    bool CheckFoo(const char* word);

protected:
    typedef std::unordered_map<std::string, bool> word_map;
    word_map words_map;
};

问题是这些代码生成了一个.core转储文件。。 你看到我的密码有错误吗


碰撞堆芯分析将我指向strcmp行

您正在声明的
temp
,然后引用不存在的
tmp

    const char* temp = word;

    if (strcmp(tmp, r.c_str() ) == 0)
这个编译吗?当然应该是:

    const char* temp = word;

    if (strcmp(temp, r.c_str() ) == 0)

还不能写评论,但是

正如Nunchy所写,tmp并不是在那个上下文中定义的。
我还注意到,您的代码从不增加map迭代器,这将导致一个永无止境的循环

我假设您没有将实际代码复制到您的帖子中,而是匆忙重写了它,这导致了一些打字错误,但如果没有,请尝试确保在调用strcmp时使用的是temp而不是tmp,并确保循环实际上增加了迭代器


就像你的文章中的一个评论指出的那样,确保你在地图上有数据,函数参数

是C还是C++?如果不是C,请适当标记。您应该在
r.C_str()
之前检查
r==null
,注意
tmp
未初始化从不增加映射迭代器
    const char* temp = word;

    if (strcmp(tmp, r.c_str() ) == 0)
    const char* temp = word;

    if (strcmp(temp, r.c_str() ) == 0)