小编bui*_*ui3的帖子

C getline内存泄漏不同的行为

我有一个关于函数的问题getline(),正如valgrind. 我发布了两个案例的代码并解释了行为。我希望有人能指出我正确的方向。

第一种情况

getline()在 while 循环中调用,读取缓冲区中文本文件的所有行。然后在循环结束时仅释放缓冲区一次:在这种情况下valgrind不会出现错误(不会发生泄漏)。

int main(int argc, char* argv[])
{
    char* buffer = NULL;
    size_t bufsize = 0;
    ssize_t nbytes;
    int counter = 0;
    char error = 0;

    FILE* input_fd = fopen(argv[1], "r");

    while ((nbytes = getline(&buffer, &bufsize, input_fd)) != -1)
    {
        counter += 1;
    }

    free(buffer);
    fclose(input_fd);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

第二种情况

同一个循环调用一个函数,该函数又调用getline(),传递相同的缓冲区。同样,缓冲区仅在循环结束时被释放一次,但在这种情况下会valgrind报告内存泄漏。事实上,让程序运行并查看 RSS,我可以看到它随着循环的进行而增加。请注意,在循环内添加一个 free(每个循环释放缓冲区)问题就会消失。这是代码。

int my_getline(FILE* lf_fd, char** lf_buffer)
{
    ssize_t lf_nbytes = 0;
    size_t lf_bufsiz …
Run Code Online (Sandbox Code Playgroud)

c valgrind memory-leaks getline

4
推荐指数
1
解决办法
236
查看次数

标签 统计

c ×1

getline ×1

memory-leaks ×1

valgrind ×1