Я написал алгоритм разбиения массива в C, но он дает мне ошибку «segmentation fault: core dumped». Вот код:Ошибка времени выполнения алгоритма разделения. Может ли кто-нибудь помочь мне найти то, что не так?
#include <stdio.h>
int main(void){
int n;
printf("insert array width\n");
scanf("%d", &n);
--n;
int A[n];
int i,j,p;
int x,t;
//inserimento valori array
printf("insert values\n");
for (i=0; i<=n; ++i){
scanf("%d", &A[i]);
}
printf("the array A is:\n");
for (i=0; i<=n; ++i){
printf("%d ", A[i]);
}
printf("\n");
Это фактический алгоритм раздела, и убедиться, что проблема здесь.
printf("insert the pivot value\n");
scanf("%d", &x);
i=0;
j=n;
while (i<j && A[i]<=x){
++i;
}
while (i<j && A[j]>x){
++j;
}
if (A[j]>x) {
--j;
}
while (i<j){
t=A[i];
A[i]=A[j];
A[j]=t;
++i;
++j;
while (A[i]<=x){
++i;
}
while (A[j]>x){
++j;
}
}
p=j;
printf("the result of the operation is:\n");
for (i=0; i<=n; ++i){
printf("%d ", A[i]);
}
return 0;
}
Может кто-нибудь помочь мне найти в чем дело? Спасибо.
Первая ошибка, которую я вижу, вы считаете, что 'scanf()' был успешным. ' –
Диапазон индекса массива от '0' до' n-1'. Поэтому 'for (i = 0; i <= n; ++ i)' должно быть 'for (i = 0; i
Если значение поворота выходит за допустимые пределы, индексирование приведет к разрыву границ массива. –