[英]C: How do I properly free the memory when lineptr == NULL in getline
来自手册页: https ://linux.die.net/man/3/getline
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
如果*lineptr 为 NULL,则 getline() 将分配一个缓冲区用于存储该行,该缓冲区应由用户程序释放。 (在这种情况下,*n 中的值将被忽略。)
由于是一个学校项目,我不能按照老师的指示使用 MALLOC ,所以我不关心该行的内容(我只想轻松跳过它)。 我怎样才能释放内存? 它分配在哪个缓冲区中?
注意:由于这是一个更理论的问题,我没有添加任何代码
这是一个示例用法:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
char *line = NULL;
size_t line_size = 0;
while (1) {
ssize_t line_char_count = getline(&line, &line_size, stdin);
if (line_char_count == -1) break;
// Use your line string, e.g. printing it:
printf("Echo: %s", line);
}
free(line);
}
您会注意到字符串line
以NULL
开头。 正如文档所解释的那样,第一次调用getline
将使它为您分配一个缓冲区(就像它在内部调用malloc
一样)。 在循环中对getline
的后续调用将重用相同的缓冲区。
一旦您使用 ctrl-d 发送输入结束,循环就会退出,并且会调用free
来释放该行。
我不关心该行的内容(我只想轻松跳过它)。
代替getline()
,代码可以使用一个简单的循环。 无分配烦恼。
int ch;
while ((ch = fgetc(stream)) != '\n' && ch != EOF) {
;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.