如何正确释放与getline()函数相关的内存?

wos*_*hen 8 c pointers getline dynamic-memory-allocation

我刚刚开始编程并有一个初学者的问题,我想编写一个函数来逐行读取未知长度的文件.因为我不知道每行的长度所以我使用了getline()函数:

void readDict(FILE *dict_file){
  //Read dic 
  char *line;
  size_t len = 0, read;
  while((read = getline(&line, &len, dict_file))!=-1){
    check(line); 
  }
  free(line);
  return;
}
Run Code Online (Sandbox Code Playgroud)

因为getline()有点类似于malloc()realloc()字符串,所以如果我继续使用这个函数来读取很多未知长度的行,我会得到内存泄漏还是内存不足?

Sou*_*osh 17

首先,你应该初始化lineptrNULL.如果没有正确的初始化,lineptr将包含不确定的值,这lineptr将指向无效的内存位置,并且稍后在进程中,它将在尝试分配()适当的内存量时调用未定义的行为realloc().

然后,根据手册页,

[...]在调用之前getline(),*lineptr可以包含指向大小已malloc()分配的缓冲区*n字节的指针.如果缓冲区不足以容纳线路,请getline()使用realloc(),更新*lineptr*n根据需要调整其大小.

所以,只要你传递相同的内容*lineptr,如果你最后free()只做一次就应该没问题.