使用getline时出现分段错误(核心已转储)

时间:2019-04-01 16:46:14

标签: c segmentation-fault

这是我的代码:

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(&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 个答案:

答案 0 :(得分:4)

指针line_lenght没有指向任何地方。它包含一个NULL指针。因此,当getline尝试取消引用此空指针时,您将调用undefined behavior,在这种情况下会导致崩溃。

不要将line_lenght定义为size_t *,而是将其定义为size_t并传递其地址。

size_t line_length = 0;
getline(&new_line, &line_length, FilePointer);

关于调用free的位置,由于ReadOneLine返回了已分配的缓冲区,因此调用ReadOneLine的函数需要调用free。在这种情况下,这意味着完成后需要在free(buffer)函数中调用main