刚刚重新编译了我的一个旧程序,以前运行得很好。
然而,现在它几乎立即在以下代码上崩溃:
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()'失败。
到目前为止我尝试过的:
-U_GLIBCXX_ASSERTIONS -U_GLIBCXX_DEBUG
什么改变了?是不是我一直做错了什么?
我认为它给出了这个错误,因为你试图访问
line.front()
,即使它是空的。我之前遇到过这个错误,检查字符串是否为空似乎可以解决它。
std::ifstream ifs(path);
std::string line;
while (std::getline(ifs, line))
{
if (!line.empty())
if (line.front() == '#') // crash
continue;
//...
}