繁体   English   中英

C:当 getline 中的 lineptr == NULL 时如何正确释放内存

[英]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); 
}

您会注意到字符串lineNULL开头。 正如文档所解释的那样,第一次调用getline将使它为您分配一个缓冲区(就像它在内部调用malloc一样)。 在循环中对getline的后续调用将重用相同的缓冲区。

一旦您使用 ctrl-d 发送输入结束,循环就会退出,并且会调用free来释放该行。

我不关心该行的内容(我只想轻松跳过它)。

代替getline() ,代码可以使用一个简单的循环。 无分配烦恼。

int ch;
while ((ch = fgetc(stream)) != '\n' && ch != EOF) {
  ;
}

暂无
暂无

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

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