c - Valgrind 报告从 stdin 获取 getline 后释放指针的内存泄漏

标签 c gcc valgrind stdin getline

有这段代码:

#include <stdlib.h>
#include <stdio.h>
void main()
{   
    char *line = calloc(1024, 1);
    size_t size = 0;
    getline(&line, &size, stdin);
    free(line);
}

Valgrind 提示:

==5931== HEAP SUMMARY:
==5931==     in use at exit: 1,024 bytes in 1 blocks
==5931==   total heap usage: 3 allocs, 2 frees, 2,168 bytes allocated
==5931== 
==5931== 1,024 bytes in 1 blocks are definitely lost in loss record 1 of 1
==5931==    at 0x4837B65: calloc (vg_replace_malloc.c:752)
==5931==    by 0x10916B: main (test.c:5)
==5931== 
==5931== LEAK SUMMARY:
==5931==    definitely lost: 1,024 bytes in 1 blocks

我看过其他相关帖子,但找不到这个特定案例的答案:/

最佳答案

这是一个 glibc 错误(或长期存在的 glibc 行为,取决于您如何看待它):

在 glibc 中很难修复,因为许多应用程序假定当长度为零时不必初始化行指针,如 kluttoriginal reply .如果 glibc 在零长度情况下开始释放或以其他方式使用行指针,这将导致崩溃。

关于c - Valgrind 报告从 stdin 获取 getline 后释放指针的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58670205/

相关文章:

c - 编辑 gtkcellrenderertext

c - 使用 Malloc 和 Free 调试指针

gcc - 如何知道ndk-build的gcc优化级别

python - 尝试使用distutils交叉编译mingw32的SWIG Python扩展时出错

c++ - valgrind 疯了还是这是真正的 std 映射迭代器内存泄漏?

c - 有没有办法在 POSIX 线程中到达 ‘join’ (阻止),而不退出加入者?

c - 在 Mac OS X 中如何在硬件级别访问以太网端口的 I/O?

c - gcc 中已经定义了哪些 C 预处理器宏?

在 Windows 上将 valgrind 与 CLion 一起使用时,Clion 无法找到项目可执行文件

C - 如何解决 "Address is 0 bytes after a block of size alloc' d"