Strcmp生成核心转储

时间:2018-11-22 00:12:33

标签: c strncmp

所以我有一个std :: unordered_map,我想访问存储在此映射中的字符串。我想对地图内的所有单词进行介绍性介绍,并与给定的单词进行比较。如果字符串相同,则继续执行if语句。

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

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

bool CheckFoo(const char* word)
{
    if (words_map.empty())
    {
        return false;
    }

    auto it = words_map.begin();

    while (it != words_map.end())
    {
        const std::string &r = it->first;
        const char* tmp = word;

        if (strcmp(tmp, r.c_str() ) == 0)
        {
            return true;
        }
    }

    return false;
}

if (    CheckFoo("wordFoo") )
{
    //  bla bla
}

问题是这些代码生成一个.core转储文件。 您在我的代码中看到任何错误吗?

崩溃核心分析将我指向strcmp行

2 个答案:

答案 0 :(得分:3)

但是还不能发表评论,

就像Nunchy所写的那样,tmp在此上下文中未定义。 我还注意到,您的代码从不增加映射迭代器,这将导致循环永无止境。

我假设您没有将实际代码复制到帖子中,而是仓促地重写了代码,这导致了一些错字,但是如果没有,请尝试确保您使用的是 temp 而不是< em> tmp 调用strcmp,并确保循环实际上增加了迭代器。

也要指出帖子中的评论之一,请确保您确实在地图中包含数据以及函数参数。

答案 1 :(得分:0)

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

    const char* temp = word;

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

可以编译吗?当然应该是:

    const char* temp = word;

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