#c #segmentation-fault
#c #ошибка сегментации
Вопрос:
Вот мой код:
char* ReadOneLine(char *FileName)
{
FILE *FilePointer = fopen(FileName, "r");
assert(FilePointer != NULL);
char* new_line = NULL;
size_t *line_lenght = 0;
//ssize_t line_size;
getline(amp;new_line, line_lenght, FilePointer);
assert(new_line == NULL);
return(new_line);
}
int main()
{
char* buffer = ReadOneLine("example"); //Buffer will do somthing later...
return (0);
}
Я продолжаю получать эту ошибку при попытке запустить программу, и я не могу понять, почему.
Плюс я знаю, что должен освободить new_line после его использования, но я не уверен, где, потому что я отправляю new_line и другим функциям.
Комментарии:
1. Добавьте код в
free
строку после того, как программа закончит ее использовать.
Ответ №1:
Указатель line_lenght
никуда не указывает. Он содержит нулевой указатель. Поэтому, когда getline
вы пытаетесь разыменовать этот нулевой указатель, вы вызываете неопределенное поведение, которое в этом случае приводит к сбою.
Вместо определения line_lenght
как size_t *
, определите его как size_t
и передайте его адрес.
size_t line_length = 0;
getline(amp;new_line, amp;line_length, FilePointer);
Что касается того, куда вызывать free
, поскольку ReadOneLine
возвращен буфер malloced, то вызванная функция ReadOneLine
должна вызвать free
. В этом случае это означает, что вам нужно вызвать free(buffer)
в main
функции, когда вы закончите с этим.
Комментарии:
1. и, возможно, также исправьте написание 🙂