Я получаю ошибку сегментации (сброс ядра) при использовании getline

#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. и, возможно, также исправьте написание 🙂