我希望在這個程序中使用一個堆棧,但它不允許我。我不斷收到段錯誤11.我通過製作一個新的矢量並設置等於第一個矢量然後彈出新矢量來解決這類問題。但我最終需要將彈出的矢量與第一個矢量同步,但它會引發段錯誤11.分割錯誤:在C++中彈出一個向量時出現11錯誤
無論如何,這裏是代碼,它是另一個項目的一部分,但我不認爲上下文太重要,不知道它是什麼對於。這也確實編譯它,只是當我運行這個方法時會拋出錯誤。
void print_well_formed_file(ifstream& ifs) {
vector<string> vec;
vector<string> finalVec;
string line;
string a;
string temp;
string final;
Lexer lexer;
Token tok;
while (getline(ifs, line)) {
lexer.set_input(line);
while (lexer.has_more_token()) {
tok = lexer.next_token();
switch (tok.type) {
case TAG:
if (tok.value[0] != '/'){
a = (tok.value);
if (a == "red") {
a = "\033[31m";
}
if (a == "green") {
a = "\033[32m";
}
if (a == "blue") {
a = "\033[34m";
}
if (a == "yellow") {
a = "\033[33m";
}
if (a == "magenta") {
a = "\033[31m";
}
if (a == "cyan") {
a = "\033[36m";
}
if (a == "dim") {
a = "\033[2m";
}
if (a == "underline") {
a = "\033[4m";
}
if (a == "bright") {
a = "\033[1m";
}
vec.push_back(a);
final = temp + a;
}
else{
string s;
string temp;
string fin;
finalVec = vec;
if(!finalVec.empty()){finalVec.pop_back();}
a = "\033[0m" + finalVec.back();
temp = final;
final = temp + a;
if(!vec.empty()){vec.pop_back();} // throws an error
vec = finalVec; // throws an error
}
break;
case IDENT:
a= (tok.value)+ " ";
temp = final;
final = temp + a;
break;
}
}
}
cout << final << endl;
}
該向量可能是空的。覈實。 –
以爲同樣的事情。在使用'pop_back()'之前檢查你的向量是否爲空。 –
我確實在之前的版本中進行過檢查,不適當的重試並回復給您。 –