使用 Valgrind 检查内存

标签 c linux memory-leaks valgrind

我运行 valgrind 以查看我的程序有哪些关于内存问题的错误。 valgrind 的输出是:

==31041== 17,736 bytes in 1 blocks are still reachable in loss record 423 of 423
==31041==    at 0x4C2CD7B: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==31041==    by 0x5B0F21F: CRYPTO_malloc (in /lib/x86_64-linux-gnu/libcrypto.so.1.0.0)
==31041==    by 0x5874B12: ??? (in /lib/x86_64-linux-gnu/libssl.so.1.0.0)
==31041==    by 0x5874C68: ??? (in /lib/x86_64-linux-gnu/libssl.so.1.0.0)
==31041==    by 0x586DE5B: ??? (in /lib/x86_64-linux-gnu/libssl.so.1.0.0)
==31041==    by 0x4E4FFEA: ??? (in /usr/lib/libpq.so.5.4)
==31041==    by 0x4E40AB5: PQconnectPoll (in /usr/lib/libpq.so.5.4)
==31041==    by 0x4E41F4D: ??? (in /usr/lib/libpq.so.5.4)
==31041==    by 0x4E428FE: PQconnectdb (in /usr/lib/libpq.so.5.4)
==31041==    by 0x401D18: open_connection (database.c:23)
==31041==    by 0x402A78: init (kernel.c:28)
==31041==    by 0x402E9C: main (main.c:22)

90%的错误,都是关于这个的!

有人知道怎么解决吗?

最佳答案

您是否正在打开许多数据库连接句柄而忘记释放它们?当使用 libpq 时,你应该总是释放由 PQconnectdb 返回的指针使用的内存,即使与服务器的连接没有成功。为此,使用指向 PGconn 的指针调用 PQfinish

关于使用 Valgrind 检查内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19484230/

相关文章:

c++ - 为什么目标文件的 debug_str 这么大?

c - 为什么在 GCC 中错误使用 __attribute__((pure)) 没有给出警告?

linux - bash 及其引用规则的问题

linux - 构建自定义小型 TCPDUMP 可执行文件,大小为 100 到 300KB

ios - ffmpeg中的内存泄漏

javascript - 避免闭包引起的 jQuery Mobile 内存泄漏

c++ - 为什么没有虚拟析构函数不会导致内存泄漏?

c++ - 检查两个数字是否互为排列?

c - 有没有重构工具可以自动将大函数拆分成小函数?

linux - 是否有可能突破受限(自定义) shell ?