basic_string.h 断言 '!empty()' 失败

问题描述 投票:0回答:1

刚刚重新编译了我的一个旧程序,以前运行得很好。
然而,现在它几乎立即在以下代码上崩溃:

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>::参考 std::__cxx11: :basic_string<_CharT, _Traits, _Alloc>::front() [with _CharT = char; _Traits = std::char_traits; _Alloc = std::分配器;引用= char&]:断言'!empty()'失败。

到目前为止我尝试过的:

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

什么改变了?是不是我一直做错了什么?

c++ string c++14 std assertion
1个回答
0
投票

我认为它给出了这个错误,因为你试图访问

line.front()
,即使它是空的。我之前遇到过这个错误,检查字符串是否为空似乎可以解决它。

std::ifstream ifs(path);
std::string line;
while (std::getline(ifs, line))
{
    if (!line.empty())
    if (line.front() == '#') // crash
        continue;
    //...
}
© www.soinside.com 2019 - 2024. All rights reserved.