Почему при компиляции Си кода возникает ошибка «Segmentation fault (core dumped)»?

Само задание к которому писался код выглядит так:
Дано три массива x[5], y[10], z [15]. Для каждого
массива требуется определить количество элементов
массива, принадлежащих интервалу [a;b]. Значения
концов интервала определяются пользователем. Если
количество окажется четным, первому элементу
массива присвоить значение а, в противном случае –
последнему элементу массива присвоить значение b.
Код программы должен содержать три
пользовательские функции, обеспечивающие:
1. Ввод элементов массива;
2. вычисление количества элементов массива,
принадлежащих интервалу [a;b];
3. замену первого либо последнего элемента массива.

Мой код:
#include <stdio.h>
#include <stdlib.h>
void arrFilling(int arr[],int arrSize){
    int min = 1;
    int max = 10;
    for(int n = 0; n < arrSize; n++){
        arr[n] = (rand() % (max - min + 1)) + min; 
        printf("%d ",arr[n]);
    }
}

int arrInterval(int arr[], int arrSize, int start, int end){
    int a = 0;   
    for(int n = 0; n < arrSize; n++){
        if(arr[n] >= start && arr[n] <= end ){
            a++;
        }
    }
    return a;
}

void arrReplace(int arr[],int arrSize,int ans){
    if(ans%2==1){
        arr[arrSize-1] = ans;
    }
    else{
        arr[0] = ans;
    }
}


int main()
{
    int x[5], y[10], z[15];
    int start, end;
    
    printf("Введите промежуток\n");
    printf("а - начало интервала: "); scanf("%d",&start);
    printf("b - конец иинтервала: "); scanf("%d",&end);
   
    arrFilling(x,5);
    printf("\n");
    arrFilling(y,10);
    printf("\n");
    arrFilling(z,15);
    printf("\n");
    
    int ans1 = arrInterval(x[5],5,start,end);
    printf("%d",ans1);
    int ans2 = arrInterval(y[10],10,start,end);
    printf("%d",ans2);
    int ans3 = arrInterval(z[15],15,start,end);
    printf("%d",ans3);
    
    arrReplace(x[5],5,ans1);
    arrReplace(y[10],10,ans2);
    arrReplace(z[15],15,ans3);
    return 0;
}
  • Вопрос задан
  • 422 просмотра
Решения вопроса 1
myjcom
@myjcom
arrInterval и arrReplace ожидают указатель, а получают int, первым параметром и т.д.
incompatible integer to pointer conversion passing 'int' to parameter of type 'int *'

а z[15] (и остальное подобное) это вообще за пределами массива.
array index 15 is past the end of the array (which contains 15 elements)

Передавайте в них просто имя массива (оно же является указателем на первый элемент).
int ans1 = arrInterval(x,5,start,end);
    printf("%d",ans1);
    int ans2 = arrInterval(y,10,start,end);
    printf("%d",ans2);
    int ans3 = arrInterval(z,15,start,end);
    printf("%d",ans3);
    
    arrReplace(x,5,ans1);
    arrReplace(y,10,ans2);
    arrReplace(z,15,ans3);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы