#30551: (系統呼叫了 abort 函式! ) 這是甚麼意思?


s010013@stmail.hhsh.chc.edu.tw (Smith)

學校 : 國立溪湖高級中學
編號 : 174920
來源 : [27.53.32.54]
最後登入時間 :
2022-10-10 09:31:00
b304. 00673 - Parentheses Balance -- UVa673 | From: [27.240.193.180] | 發表日期 : 2022-05-28 23:48

剛學到vector,想說用來解解看堆疊的題目,結果一直遇到這個問題,上網查好像說是跟陣列長度不夠有關,但是vector會有這種問題嗎?又該如何解決呢?

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

vector<char> vec;
vector<int>::iterator it;

int main(){
    int n;
    string a;
    cin >> n;
    for(int i = 0; i < n; i++){
        a = "";
        cin >> a;
        
        //如果是空字串
        if(a == ""){
            cout << "Yes\n";
            continue;
        }
        
        for(int j = 0; j < a.size(); j++){
            if(a[j] == '(' or a[j] == '['){
                vec.push_back(a[j]);
            }
            else{
                vec.pop_back();
            }
        }
        vec.empty() == true
        ? cout << "Yes\n"
        : cout << "No\n";
        vec.clear();
    }
}

 
#30552: Re: (系統呼叫了 abort 函式! ) 這是甚麼意思?


s010013@stmail.hhsh.chc.edu.tw (Smith)

學校 : 國立溪湖高級中學
編號 : 174920
來源 : [27.53.32.54]
最後登入時間 :
2022-10-10 09:31:00
b304. 00673 - Parentheses Balance -- UVa673 | From: [27.240.193.180] | 發表日期 : 2022-05-29 00:04

我剛改了一次程式碼但仍然會遇到上述的問題,下面是我改的新程式碼

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

vector<char> vec;

int main(){
    int n;
    string a;
    cin >> n;
    cin.ignore();
    for(int i = 0; i < n; i++){
        a = "";
        getline(cin, a);
        if(a == ""){
            cout << "Yes\n";
            continue;
        }
        for(int j = 0; j < a.size(); j++){
            if(a[j] == '(' or a[j] == '['){
                vec.push_back(a[j]);
            }
            else{
                vec.pop_back();
            }
        }
        vec.empty() == true
        ? cout << "Yes\n"
        : cout << "No\n";
        vec.clear();
    }
}

 
#30561: Re: (系統呼叫了 abort 函式! ) 這是甚麼意思?


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [39.9.74.255]
最後登入時間 :
2024-10-14 22:20:08
b304. 00673 - Parentheses Balance -- UVa673 | From: [59.115.10.38] | 發表日期 : 2022-05-29 09:51


                vec.pop_back();


vec有可能是空的,對空的vector做pop_back會造成undefined behavior

 
#30573: Re: (系統呼叫了 abort 函式! ) 這是甚麼意思?


s010013@stmail.hhsh.chc.edu.tw (Smith)

學校 : 國立溪湖高級中學
編號 : 174920
來源 : [27.53.32.54]
最後登入時間 :
2022-10-10 09:31:00
b304. 00673 - Parentheses Balance -- UVa673 | From: [27.51.81.45] | 發表日期 : 2022-05-29 16:53


                vec.pop_back();


vec有可能是空的,對空的vector做pop_back會造成undefined behavior


好的,謝謝提醒,已解決

 
ZeroJudge Forum