c# C:当getline中的lineptr == NULL时,我如何正确地释放内存

smdnsysy  于 2022-12-16  发布在  C#
关注(0)|答案(1)|浏览(214)

在手册页中:https://linux.die.net/man/3/getline

ssize_t getline(char **lineptr, size_t *n, FILE *stream);

如果 *lineptr为NULL,则getline()将分配一个缓冲区来存储该行,该缓冲区应该由用户程序释放(在这种情况下,*n中的值被忽略)。
由于是学校的作业我不能使用MALLOC根据老师的指示,我不关心行的内容(我只想轻松跳过它)。我如何释放内存?它被分配到哪个缓冲区?
注意:由于这是一个理论性较强的问题,我没有添加任何代码

jjhzyzn0

jjhzyzn01#

下面是一个示例用法:

#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以释放该行。

相关问题