现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

linux下c语言内存泄漏总结

2019-05-09 21:12 工业·编程 ⁄ 共 598字 ⁄ 字号 暂无评论

内存泄露问题是c语言很容易出现的问题,小程序可以很容易的发现,但是大程序就比较难发现了。

内存泄露是由于动态分配的内存没有被释放,可以使用valgrind等工具检查出来。

常见导致内存泄露的函数有malloc、calloc,以及间接使用malloc的函数strdup、strndup等。还包括mmap函数。

要避免内存泄漏需要以下函数成对出现:

malloc/free

calloc/free

strdup/free

strndup/free

mmap/munmap

<以后遇到坑,继续添加>

我遇到的问题是遇到了内存泄漏,但是valgrind没有查出来有malloc未被释放的。结果是由于mmap没有释放导致的。

$ valgrind --leak-check=yes --leak-check=full --show-leak-kinds=all ./bin/ap_collector > lost.log 2>&1

尽管没有查出来内存泄漏,但是内存还是在快速持续增长。后来自己分析:

1、内存持续增长:定位基本上都发生在while循环内。

2、内存块速增长:说明有大量内存块被申请,没有释放。

3、没有malloc和strdup的内存泄漏:说明需要查看其它函数是否有申请大块内存。

于是基于以上几点分析,检查了我的循环处理逻辑中的代码,发现mmap申请的内存忘记释放了,添加munmap之后,内存泄露就解决了。

记录自己踩过的坑,积累经验。

给我留言

留言无头像?