я написал программу для подсчета сортировки с использованием указателей
#include<stdio.h>
#include<stdlib.h>
int max(int *arr,int n)
{
int i;
int maxi=*arr;
for(i=0;i<n;i++)
{
if(*(arr+i)>maxi)
maxi=*(arr+i);
}
return maxi;
}
void count(int *arr,int n)
{
int i;
int s=max(arr,n);
printf("max %d",s);
int c[s];
memset(c,0,s*sizeof(int));
int b[n];
for(i=0;i<n;++i)
{
++c[arr[i]];
}
for(i=1;i<s;++i)
{
c[i]=c[i]+c[i-1];
}
for(i=n-1;i>=0;--i)
{
b[c[arr[i]]]=arr[i];
--c[arr[i]];
}
for(i=0;i<n;++i)
{
arr[i]=b[i];
}
}
void print(int *arr,int n)
{
int i;
for(i=0;i<n;i++)
printf("\nelement is %d ",*(arr+i));
}
int main()
{
int n,i;
int *arr=malloc(n*sizeof(int));
printf("\nenter the number of elements ");
scanf("%d ",&n);
for(i=0;i<n;i++)
scanf("%d",&arr[i]);
count(arr,n);
print(arr,n);
return 0;
}
, так как я отлаживаю программу, она останавливается на ++c[arr[i]]
, что вызывает ошибку сегментации. Мое окно наблюдения за вызовами выглядит следующим образом
мои входные данные были такими:
enter the number of elements 4
1
3
5
7
max 7
код получил ошибку сегментации после этого также значение i Инициализированный до 0, тогда почему окно наблюдения показывает его значение как 4. Хорошо ли передавать индексные индексы в массив stati c или я должен объявлять c динамически?