繁体   English   中英

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

[英]How do I properly free memory related to getline() function?

我刚刚开始编程并有一个初学者的问题,我想编写一个函数来逐行读取未知长度的文件。 因为我不知道每行的长度所以我使用了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;
}

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

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

然后,根据手册页

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

所以,只要你传递相同的*lineptr ,如果你最后只有一次free() ,你应该没问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM