C++ 什么是分段错误?为什么我总是得到一个分段错误?

C++ 什么是分段错误?为什么我总是得到一个分段错误?,c++,C++,我正在使用lexer,当我运行测试程序时,我不断遇到以下错误: 分段错误 我读到了有关错误的信息,我非常确定我正在尝试编写只读内存。 这是我的代码: #include <bits/stdc++.h> #include <iostream> using namespace std; vector <string> split(string line) { vector <string> tokens; stringstream check

我正在使用lexer,当我运行测试程序时,我不断遇到以下错误:

分段错误

我读到了有关错误的信息,我非常确定我正在尝试编写只读内存。 这是我的代码:

#include <bits/stdc++.h>
#include <iostream>

using namespace std;

vector <string> split(string line) {
  vector <string> tokens;
  stringstream check1(line);
  string intermediate;

  while(getline(check1, intermediate, ';')) {
    tokens.push_back(intermediate + ";");
  }
  return tokens;
}

vector <vector<string>> lex(vector <string> tokens) {
  vector <vector<string>> lexed;
  lexed[0] = tokens;
  string token;
  for (int i = 0; i < tokens.size(); i++) {
    token = tokens[i];
    cout << token;
  }
  return lexed;
}

int main() {
  string line = "print(32); print(54); print(432);";
  vector <string> tokens = split(line);
  vector <vector<string>> x = lex(tokens);
  for(int i = 0; i < tokens.size(); i++) {
    cout << tokens[0][i] << "\n";
  }
}
#包括
#包括
使用名称空间std;
向量拆分(字符串行){
向量标记;
字符串流检查1(行);
弦中间;
while(getline(选中1,中间“;”)){
代币。推回(中间+“;”);
}
归还代币;
}
向量lex(向量令牌){
向量lexed;
lexed[0]=令牌;
字符串标记;
for(inti=0;i可能有很多原因导致SEGT故障。您的原因在这里

vector <vector<string>> lexed;
lexed[0] = tokens;

造成SEGFULT的原因有很多,你的就在这里

vector <vector<string>> lexed;
lexed[0] = tokens;

vector lexed;lexed[0]=tokens;
is ErrorSegmentation fault=您正在读取无法读取的内存(用蹩脚的话).“为什么”…是相同的定义这是否回答了您的问题?如果您使用
at()
而不是
[]
若要访问向量元素,您可能会在()< /Cord> >调用而不是SEG错误,从而使您更容易调试问题。例如,使用它沿边<代码> >包含< /COD>暗示您不知道什么是“代码”>包含< <代码> >。在使用C++之前,应该使用。但是在这种情况下,<代码>向量LISED;ListED〔0〕。=tokens;
is ErrorSegmentation fault=您正在读取无法读取的内存(用蹩脚的文字)…为什么“…是相同的定义这是否回答了您的问题?如果您使用
at()
而不是
[]
若要访问向量元素,您可能会在()< /Cord> >调用而不是SEG错误,这样就更容易调试问题。例如,使用它边边<代码> >包含< /COD>暗示您不知道什么是“代码> >包含< /COD>”。在使用C++之前,应该是这样。但是,在这种情况下。;?似乎是一个更好的解决方案me@JackDavis--将行更改为
lexed.at(0)=tokens;
,您将看到我在主要部分的评论中所述的内容。
vector lexed{tokens};
?似乎是更好的解决方案me@JackDavis--将行更改为
lexed.at(0)=tokens;
,您将看到我在主要部分的注释中所述的内容。