basic_string.h 断言“!empty()”失败

basic_string.h Assertion '!empty()' failed

提问人:Cobra_Fast 提问时间:10/29/2022 更新时间:10/29/2022 访问量:268

问:

刚刚重新编译了我的一个旧程序,该程序曾经运行良好。
但是,现在它几乎立即在以下代码上崩溃:

std::ifstream ifs(path);
std::string line;
while (std::getline(ifs, line))
{
    if (line.front() == '#') // crash
        continue;
    //...
}

崩溃消息为:

/usr/src/debug/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/basic_string.h:1280: std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::reference std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::front() [with _CharT = char; _Traits = std::char_traits; _Alloc = std::allocator; reference = char&]: 断言 '!empty()' 失败。

到目前为止,我尝试过:

  • 使用 GCC11 而不是 12 进行编译。
  • 设置-U_GLIBCXX_ASSERTIONS -U_GLIBCXX_DEBUG

发生了什么变化?我一直做错了什么吗?

C++ 字符串 C++14 STD 断言

评论

1赞 Igor Tandetnik 10/29/2022
显然,该文件包含一些空行。 当为空字符串时,表现出未定义的行为。是的,这段代码一直都是错误的。line.front()line
1赞 Tim Roberts 10/29/2022
右。 将修复它。if( line.empty() || line.front() == '#' )
0赞 sweenish 10/29/2022
该代码也不会检查它是否成功打开了文件。

答: 暂无答案