Пара замечаний / возможностей, которые я вижу:
Если при проверке fp
произойдет сбой fopen()
, для него будет задано значение NULL, а не отрицательное число, так что это может быть источником или ошибкой.
if (fp == NULL) {
fprintf(stderr, "Couldn't open file to read in. | error number %d : %s \n", errno, strerror(errno));
exit(1);
}
Когда вы делаете fscanf
и strcpy()
, буфер может переполниться, лучше всего сделать fgets()
и strncpy()
и указать MAX_LENGTH
while (fgets (buffer, MAX_LENGTH, fp) != NULL) {
array[i] = malloc (MAX_LENGTH);
strncpy (array[i++], buffer, MAX_LENGTH);
}
Цикл free()
может использовать тот же итератор i
и декремент, чтобы быть уверенным, что мы освобождаем все, что мы выделили, не больше, не меньше.
while (--i >= 0){
free(array[i]);
}
Ошибка сегментации обычно возникает, когда вы пытаетесь получить доступ к памяти, к которой у вас нет доступа или которой нет. Иногда выбрасывается MPU (блок защиты памяти).