C++ 无法找到发生分段错误的位置

C++ 无法找到发生分段错误的位置,c++,segmentation-fault,stack,C++,Segmentation Fault,Stack,每当我遇到查询“Q”时,我应该打印堆栈的最大元素(这里使用vector来实现堆栈)。当我针对一些示例测试用例运行它时,它工作得很好,但每当我提交代码时,它就会给我错误 当查询为10时,将10添加到堆栈中, 当查询为R时,从堆栈中弹出元素, 当查询为Q时,打印堆栈中最大的元素 #include <stdio.h> #include <bits/stdc++.h> #include <iostream> #include <vector> using

每当我遇到查询“Q”时,我应该打印堆栈的最大元素(这里使用vector来实现堆栈)。当我针对一些示例测试用例运行它时,它工作得很好,但每当我提交代码时,它就会给我错误

当查询为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

#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
int t=0;
cin>>t;
对于(int x=0;x>q;
载体myvec;
向量trackvec;
int top=-1;
对于(int i=0;i>s;
如果(s==“A”){
int num=0;
cin>>num;
myvec.push_back(num);
如果(i==0){trackvec.push_back(num);top++}
否则{
如果(num>trackvec[top]){
trackvec.push_back(num);
top++;
}                   
否则{
trackvec.向后推(trackvec[top]);
top++;
}
}
}
否则,如果(s==“R”){
myvec.pop_back();
trackvec.pop_back();
顶部--;
}
否则如果(s==“Q”&&top==-1){
库特
我已经编辑了文章,您可以检查示例输入,但是代码对这些示例输入很有效

您的第一项任务应该是生成导致崩溃的输入。您对输入中有多少个
A
s和
R
s进行了哪些假设

以下是在我的系统上产生分段故障的输入:

1
2
R
Q

希望您现在能清楚地看到修复方法。

这似乎是学习如何使用调试器的一个很好的时机。如果您在调试器中运行该程序,它将在发生崩溃时捕获崩溃,并让您检查调用堆栈以查看其发生在代码中的位置。您还将能够看到相关变量的值。欢迎使用!请ee和。你输入到你的程序中导致崩溃的确切输入是什么?天哪,没想到我会这么快收到回复,@Someprogrammerdude@ggorlen谢谢你的建议,我会检查它们的!@EmployedRussian我编辑了帖子,你可以检查示例输入,但代码对这些示例输入很有效。@a x表示添加integer x到列表中…R表示删除最后插入的元素,Q表示打印列表中当前最大的元素。在此之前,您应该已经看到了,非常感谢!