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