首页 > 解决方案 > SIGSEGV 错误,代码是正确的,但仍然没有给出任何输出,有人可以解释一下吗

问题描述

    #include <iostream>
    #include <bits/stdc++.h>
    #include <stack>
    #include <algorithm>
    #include <vector>
    #include <iterator>
    #define ll long long    
    using namespace std;
    int main() {
        ll t;
        cin >> t;
        while(t--) {
           ll n,k;
           cin >>n >>k;
           vector<ll> arr;
           for(int i=0; i<n; i++) cin >>arr[i];
            vector <ll> freq;
           for(int i=1;i<=k;i++) freq.push_back(i);
           ll min=n,val,diff=0,max=0;
            for(int i=0;i<k;i++){
               ll c=count(arr.begin(),arr.end(),freq[i]);
               if(min>c) 
               {min=c;
               val=freq[i];
               }
           }
           if(min==0) max=n;
           else{
               vector<ll> diffarr;
            diffarr.push_back(0);
               for(int i=0;i<n;i++)
               {
                   
                 if(arr[i]==val){
                     diffarr.push_back(i);                     
                      }
               }
               for(int i=0;i<min;i++)
               {
                   diff=diffarr[i+1]-diffarr[i];
                   if(max<diff) max=diff;
               }
           }
            cout <<max <<endl;
                    }
        return 0;
    }

当不接受输入时,代码工作正常,但一旦我接受输入,它就会抛出一个 SIGSEGV 错误,我已经对其进行了多次调试,以消除所有分段错误和各种错误。有人可以调查一下吗,那将是 gr8 的帮助

标签: debuggingvectorsegmentation-faultfrequency

解决方案


代码是正确的

不,不是。从这些行开始:

vector<ll> arr;
for(int i=0; i<n; i++) cin >>arr[i];

您声明一个向量arr,并立即尝试写入该向量中的元素 0。

但是向量还是空的,所以里面没有元素0。在大多数 STL 实现中,这将通过尝试写入地址 0 来崩溃。

阅读如何调试小程序可能会让您受益。学习如何使用调试器也是如此。


推荐阅读