@Fuch
bmstu student

Почему возникает ошибка «Process finished with exit code 139»?

#include <stdio.h>
#include "stdlib.h"

int input_array(int a, int* b){
    b = (int*) malloc(a * sizeof(int));
    for (int i = 0; i < a; ++i) {
        printf("array[%d] = ", i);
        scanf("%d", *(b+i));
    }
    return b;
}

int find_min(int* b, int a){
    int min = *b;
    for (int i = 1; i < a; ++i) {
        if (*(b+i) < min)
            min = *(b+i);
    }
    return min;
};

int find_max(int* b,int a){
    int max = *b;
    for (int i = 1; i < a; ++i) {
        if (*(b+i) > max)
            max = *(b+i);
    }
    return max;
}

float average_function(int min, int max){
    float average = (min + max)/2;
    return average;
}
int main() {
    int a, min, max;
    float average;
    int* b = NULL;
    printf("Введите длину массива:");
    scanf("%d", &a);
    input_array(a, b);
    find_min(b, a);
    find_max(b,a);
    average_function(min, max);
    printf("Минимум: ""%d \n", min);
    printf("Максимум: ""%d \n", max);
    printf("Среднее: ""%f \n", average);
    free(b);
    return 0;
}
  • Вопрос задан
  • 64 просмотра
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
http://dilbert.com/strip/1998-08-24
Почему возникает ошибка

Из-за лишней звёздочки вот тут в функции input_array: scanf("%d", *(b+i));
Но и дальше пораскидано граблей: input_array выделяет память (b = (int*) malloc(a * sizeof(int));) и даже пытается её возращать, но неправильным типом и main это значение не использует. А поэтому в main b как был NULL так и остаётся. По-хорошему надо как-то так:

int * input_array(int a){
    int *b = (int*) malloc(a * sizeof(int));
    for (int i = 0; i < a; ++i) {
        printf("array[%d] = ", i);
        scanf(" %d", b+i);
    }
    return b;
}


int main() {
    ...
    printf("Введите длину массива:");
    scanf(" %d", &a);
    int *b = input_array(a);
    min = find_min(b, a);
    max = find_max(b,a);
    average = average_function(min, max);
    ...
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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