Strcmp генерирует дамп ядра - PullRequest
       66

Strcmp генерирует дамп ядра

0 голосов
/ 22 ноября 2018

Итак, у меня есть 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 голосов
/ 22 ноября 2018

Пока не могу писать комментарии, но,

Как писал Nunchy, tmp не определено в этом контексте.Я также заметил, что ваш код никогда не увеличивает итератор карты, что приводит к бесконечному циклу.

Я предполагаю, что вы не скопировали свой фактический код в свой пост, а вместо этого переписали его поспешно, что привело к некоторымопечатки, но если нет, попробуйте убедиться, что вы используете temp , а не tmp при вызове strcmp, и убедитесь, что цикл фактически увеличивает итератор.

Как и в одном из комментариев к вашему сообщению, убедитесь, что у вас действительно есть данные на карте и параметр функции.

0 голосов
/ 22 ноября 2018

Вы объявляете temp, а затем ссылаетесь на tmp, который не существует:

    const char* temp = word;

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

Это компилируется?Наверняка это должно быть:

    const char* temp = word;

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

?

...