#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.
Чтение инструкций по отладке небольших программ, вероятно, пойдет вам на пользу. Так же как и обучение использованию отладчика.