首页 > 解决方案 > 无法指出发生分段错误的位置

问题描述

每当我遇到查询“Q”时,我应该打印堆栈的最大元素(在此处使用向量来实现堆栈),当我针对一些示例测试用例运行它时它工作得很好,但是每当我提交代码时,它都会给我分段错误.

当查询是 A 10将 10添加到堆栈中,当查询是 R从堆栈中弹出元素时,当查询是 Q 时打印堆栈中的最大元素

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


int main() {
   int t=0;
    cin>>t;

    for(int x=0;x<t;x++){
      printf("Case %d:\n",x+1);  
     int q=0;
        cin>>q;
        vector<int> myvec;
        vector<int> trackvec;
        int top=-1;

        for(int i=0;i<q;i++){
            string s;
            cin>>s;
            if(s=="A"){
              int num=0;
                cin>>num;
                myvec.push_back(num);
                if(i==0){trackvec.push_back(num);top++;}
                else{
                    if(num>trackvec[top]){
                     trackvec.push_back(num);   
                        top++;
                    }                   
                    else{
                        trackvec.push_back(trackvec[top]);
                        top++;
                    }
                }

            }

            else if(s=="R"){
                myvec.pop_back();
                trackvec.pop_back();
                top--;
            }
            else if(s=="Q" && top==-1){
                cout<<"Empty"<<endl;
            }
            else if(s=="Q"){
                cout<<trackvec[top]<<endl;
            }


    }
}
}
The trackvec here is to keep track of the largest element 

Sample input:
2
7
A 10
A 5
Q
A 100
Q
R
Q
6
A 5
Q
R
Q
R
R

标签: c++segmentation-faultstack

解决方案


我已经编辑了您可以检查示例输入的帖子,但是代码对于这些示例输入确实有效

您的首要任务应该是生成导致崩溃的输入。你对输入中有多少As 和Rs 做了什么假设?

这是在我的系统上产生分段错误的输入:

1
2
R
Q

修复希望现在对您来说是显而易见的。


推荐阅读