strcmp 生成核心转储
Strcmp generate a core dump
所以我有一个 std::unordered_map,我想访问存储在这张地图中的字符串。我想搜索 intro intro 地图内的所有单词并与给定单词进行比较。如果字符串相同则继续执行 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 行
您正在声明 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 未在该上下文中定义。
我还注意到您的代码从不递增地图迭代器,这将导致永无止境的循环。
我假设您没有将实际代码复制到您的 post 中,而是仓促地重写了它,这导致了一些拼写错误,但如果没有,请尝试确保您使用的是 在调用 strcmp 时使用 temp 而不是 tmp,并确保循环实际递增迭代器。
就像您的 post 中的评论之一也指出的那样,请确保地图和函数参数中确实有数据。
所以我有一个 std::unordered_map,我想访问存储在这张地图中的字符串。我想搜索 intro intro 地图内的所有单词并与给定单词进行比较。如果字符串相同则继续执行 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 行
您正在声明 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 未在该上下文中定义。 我还注意到您的代码从不递增地图迭代器,这将导致永无止境的循环。
我假设您没有将实际代码复制到您的 post 中,而是仓促地重写了它,这导致了一些拼写错误,但如果没有,请尝试确保您使用的是 在调用 strcmp 时使用 temp 而不是 tmp,并确保循环实际递增迭代器。
就像您的 post 中的评论之一也指出的那样,请确保地图和函数参数中确实有数据。