Ошибка SIGSEGV, код правильный, но по-прежнему не выдает никаких выходных данных, может кто-нибудь объяснить

#debugging #vector #segmentation-fault #frequency

Вопрос:

     #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

Ответ №1:

код правильный

Нет, это не так. Начните с этих строк:

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

Вы объявляете пустой вектор arr и немедленно пытаетесь записать в элемент 0 в этом векторе.

Но вектор все еще пуст, поэтому в нем нет элемента 0. В большинстве реализаций STL это приведет к сбою при попытке написать по адресу 0.

Чтение инструкций по отладке небольших программ, вероятно, пойдет вам на пользу. Так же как и обучение использованию отладчика.