Ошибка SIGSEGV при подсчете вопросов на основе сортировки - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь задать вопрос, основанный на сортировке по основанию.Постановка проблемы: https://www.hackerearth.com/practice/algorithms/sorting/radix-sort/practice-problems/algorithm/monk-and-sorting-algorithm/#c186191

Однако я продолжаю сталкиваться с ошибкой SIGSEGV.Я вручную попытался отследить код, но не смог найти ошибку.

Вещи, которые могут (возможно) вызвать это:

  1. Размер массива, который я объявляю
  2. Возможно, я делаю глупую ошибку, которую я не могу точно определитьпрямо сейчас
#define range 100000

lli MAX(lli ar[], int size1){
    int i; lli max1 = ar[0];
    for(i = 0; i<size1; i++){
        if(ar[i]>max1)
            max1 = ar[i];
    }
    return max1;
}

void countsort(lli arr[],int n,lli place)
{
        int i,freq[1000001]={0};         range from 0-9
        lli output[n];
        for(i=0;i<n;i++)
                freq[(arr[i]/place)%range]++;
        for(i=1;i<1000001;i++)
                freq[i]+=freq[i-1];
        for(i=n-1;i>=0;i--)
        {
                output[freq[(arr[i]/place)%range]-1]=arr[i];
                freq[(arr[i]/place)%range]--;
        }
        for(i=0;i<n;i++)
                arr[i]=output[i];
        for(i = 0; i<n; i++)
            printf("%lld ", arr[i]);
        printf("\n");
}
void radixsort(lli arr[],int n,int maxx)            //maxx is the maximum element in the array
{
        lli mul=1;
        while(maxx)
        {
                countsort(arr,n,mul);
                mul*= range;
                maxx/= range;
        }
}

int main(){
    int size, i; long long int ar[1000001];
    scanf("%d", &size);
    for(i = 0; i<size; i++)
        scanf("%lld", &ar[i]);
    lli max = MAX(ar, size);
    radixsort(ar, size, max);

    return 0;


}

Сообщение об ошибке я получаю:

Execution failed.
Segmentation Fault : This occurs because of an out-of-scope array index that is causing a buffer overflow, an incorrectly initialized pointer, etc. A signal is generated when a program either tries to read or write outside the memory that is allocated for it or to write memory that can only be read. For example, you are accessing a[-1] in a language that does not support negative indices for an array.

...