c语言 - 我在使用 getline 时遇到分段错误(核心转储)



这是我的代码:

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发送到其他功能。

指针

line_lenght不指向任何地方。 它包含一个 NULL 指针。 因此,当getline尝试取消引用此空指针时,您会调用未定义的行为,在这种情况下会导致崩溃。

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

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

至于在哪里调用free,由于ReadOneLine返回了错误定位的缓冲区,因此调用ReadOneLine的函数需要调用free。 在这种情况下,than 意味着您需要在完成 main 函数后在 free(buffer) 中调用它。

相关内容

  • 没有找到相关文章