C++ STL字符串::长度()分段错误

C++ STL字符串::长度()分段错误,c++,string,stl,segmentation-fault,string-length,C++,String,Stl,Segmentation Fault,String Length,但是,我发现它在读取第一行(第4个字符)上的“”字符(空格)时存在分段错误: (gdb)运行

但是,我发现它在读取第一行(第4个字符)上的“”字符(空格)时存在分段错误:

(gdb)运行

我真的不明白为什么,我没有在循环中做任何事情,我只是在循环。

我已经发现了问题。这是内部循环:

(gdb) run < texquotes_input.txt 
Starting program: /home/david/src/oni/texquotes < texquotes_input.txt

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7b92533 in std::string::length() const () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
用于(u=0;u<(int)行[u]。长度();u++)
{
}
应该是:

for (u = 0; u < (int) lines[u].length(); u++)
{

}
用于(u=0;u<(int)行[i]。长度();u++)
{
}

在另一个答案中,已经发现了索引输入错误

我想补充一点,对
循环使用基于范围的
,这类问题更难发生,因为循环更“隐含”:

#包括
#包括
#包括
使用名称空间std;
int main()
{
弦线;
矢量线;
while(getline(cin,line))
{
线。推回(线);
}
用于(常量自动和当前行:行)
{
用于(自动通道:currLine)
{

很好的“小而完整的可编译示例”。经验法则:如果stdlib中存在segfault,那么您可能正在读/写/删除您不应该读/写的内容;)。
(gdb) run < texquotes_input.txt 
Starting program: /home/david/src/oni/texquotes < texquotes_input.txt

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7b92533 in std::string::length() const () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
for (u = 0; u < (int) lines[u].length(); u++)
{

}
for (u = 0; u < (int) lines[i].length(); u++)
{

}
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main()
{
  string line;
  vector<string> lines;
  while (getline(cin, line))
  {
    lines.push_back(line);
  }

  for ( const auto& currLine : lines )
  {
    for ( auto ch : currLine )
    {
      cout << ch;  
    }
    cout << '\n';
  }
}