Fgets и ошибка сегментации

Я получил эту функцию:

#define DIGITS_MAXIMUM_NUMBER 10

int* read_from_file(const char* file_name)
{
        int limit = 101;
        int *values = (int *) malloc(sizeof(int) * limit);
        FILE *fp = fopen(file_name, "r");
        char string_value[DIGITS_MAXIMUM_NUMBER];
        int i = 1;

        while(fgets(string_value, DIGITS_MAXIMUM_NUMBER, fp) != NULL)
        {
                if (i >= limit) {
                        limit += 100;
                        values = realloc(values, limit);
                }

                values[i] = atoi(string_value);
                i++;
                if ( i >= 106 )
                        printf("%d\n", i);
        }

        values[0] = i;

        if (i != limit)
                values = realloc(values, i);

        fclose(fp);
        return values;
}

Я получаю ошибку сегментации на 106-й итерации, это означает, что цикл работает, но на этой определенной итерации, когда выполняется fgets, возникает ошибка сегментации.

Если кто-нибудь знает почему или имеет хотя бы свое мнение, было бы здорово поделиться, спасибо.

🤔 А знаете ли вы, что...
C предоставляет возможность работы с низкоуровневыми аппаратными ресурсами, такими как порты ввода-вывода и регистры устройств.


50
1

Ответ:

Решено

Немедленное решение:

// values = realloc(values, limit);
values = realloc(values, sizeof *values * limit);

Однако вы можете многое улучшить!