Ошибка сегментации при попытке положить sh в стек int или вектор в C ++ - PullRequest
0 голосов
/ 10 апреля 2020

сейчас я пытаюсь решить проблему конкурентного программирования, но всякий раз, когда я пытаюсь вывести sh на вектор (bb), это дает мне ошибку. Я пытался исправить это, переключаясь со стека на вектор и просто пытаясь вывести обычное целое число без переменных, * * * *, но мне не повезло.

#include <bits/stdc++.h>
#include <iostream>
#include <stack>
using namespace std;


int main(){
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int t, n;
    cin >> t;

    for(int e = 0; e < t; e++){

        cin >> n;
        int want = 1, temp;
        bool flag = true;
        stack<int> mountain;
        vector<int> bb;

        for(int i = 0; i < n; i++){
            cin >> temp;
            mountain.push(temp);
        }

        while(!mountain.empty() || !bb.empty()){

            if(mountain.top() == want){
                mountain.pop();
                want++;

            }else if(!bb.empty() && bb.back() == want){
                bb.pop_back();
                want++;

            }else if(mountain.size() > 1){
                 bb.push_back(mountain.top()); // <-----------------
                mountain.pop();

            }else{
                cout << "N\n";
                flag = false;
                break;

            }
            if(flag && want == n + 1) cout << "Y\n";
        } 

    }   

    return 0;
    }

Если вам нужен какой-либо контекст для проблемы, его можно найти здесь .

1 Ответ

0 голосов
/ 10 апреля 2020

Когда я компилирую ваш код и запускаю его через gdb, я получаю segfault в следующей строке:

 while(!mountain.empty() || !bb.empty()){

            if(mountain.top() == want){    <-------------------
                mountain.pop();
                want++;

Это потому, что при проверке while вы проверяете, есть ли bb ИЛИ mountain пусто, чтобы продолжить. bb не пусто, гора равна . Затем вы пытаетесь позвонить mountain.top(), который вызывает вашу ошибку.

Здесь нужно почистить логи c.

...