C++ vector <string> segfaults

cip*_*her 0 c++ vector segmentation-fault

我一直在下面的代码中遇到段错误!任何人都可以解释发生了什么?

#include <iostream>
#include <sstream>
#include <string>
#include <vector>

using namespace std;

int main()
{
    string line;
    getline(cin, line, '\n');
    istringstream iss(line);
    vector<string> result;

    for(string token; getline(iss, token, ' '); )
    {
        //if(token.empty()) continue;
        result.push_back(token); // << Segfaults here
    }

    for(int i = result.size()-1; i>=0; i++)
    {
        cout << result[i] << ' ';
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*rtz 10

  for(int i = result.size()-1; i>=0; i++){
Run Code Online (Sandbox Code Playgroud)

你的循环不会停止.

也许你想要:

for(int i = result.size()-1; i >= 0; i--)
Run Code Online (Sandbox Code Playgroud)

或者,更好的是:

for(auto i = result.rbegin(); i!= rend(); i++) {
  cout << *i << ' ';
}
Run Code Online (Sandbox Code Playgroud)

  • 您可能没有看到它,因为您没有添加日志记录以进行故障排除.记录最明显的事情是```和`result.size()`就在`cout`行之前.那会立即解决问题.(您可以使用调试器,通过分析核心转储或许多其他方式来执行相同的操作.) (3认同)
  • @cipher:`auto`需要C++ 11或更高版本.如果你被困在过去,你需要`vector <string> :: reverse_iterator`.从`rend()开始`将是错误的 - 这是一个"过去的结束"迭代器,用于标记反转序列的结束. (2认同)