免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11401 | 回复: 9
打印 上一主题 下一主题

[C] libcurl内存泄漏,难得是BUG?! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-14 14:14 |只看该作者 |倒序浏览
最近为了写一段爬虫用到了libcurl,发现总是有12字节的内存泄漏,仔细检查了自己的代码感觉没错,于是怀疑是libcurl的问题。

直接用curl.haxx.se上的simple.c,加上mtrace
  1. #include <mcheck.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <curl/curl.h>

  5. int main(void)
  6. {
  7.   CURL *curl;
  8.   CURLcode res;

  9. #ifdef DEBUG
  10.     setenv("MALLOC_TRACE", "./memleak.log", 1);
  11.     mtrace();
  12. #endif


  13.   curl = curl_easy_init();
  14.   if(curl) {
  15.     curl_easy_setopt(curl, CURLOPT_URL, "http://www.baidu.com");
  16.     res = curl_easy_perform(curl);

  17.     /* always cleanup */
  18.     curl_easy_cleanup(curl);
  19.   }
  20.   return 0;
  21. }
复制代码
编译后mtrace结果依旧
  1. Memory not freed:
  2. -----------------
  3.    Address     Size     Caller
  4. 0x08054018     0x12  at 0xb7e806c1
复制代码
再看看log里的0xb7e806c1
  1. @ /lib/tls/i686/cmov/libc.so.6:(inet_ntoa+0xd1)[0xb7e806c1] + 0x8054018 0x12
复制代码


inet_ntoa返回的串没被free?!

请问有人遇到过这样的问题吗?


[ 本帖最后由 pk9284 于 2008-9-14 14:16 编辑 ]

论坛徽章:
38
2017金鸡报晓
日期:2017-02-08 10:39:4215-16赛季CBA联赛之深圳
日期:2023-02-16 14:39:0220周年集字徽章-年
日期:2022-08-31 14:25:28黑曼巴
日期:2022-08-17 18:57:0919周年集字徽章-年
日期:2022-04-25 13:02:5920周年集字徽章-20	
日期:2022-03-29 11:10:4620周年集字徽章-年
日期:2022-03-14 22:35:1820周年集字徽章-周	
日期:2022-03-09 12:51:3220周年集字徽章-年
日期:2022-02-10 13:13:4420周年集字徽章-周	
日期:2022-02-03 12:09:4420周年集字徽章-20	
日期:2022-01-25 20:14:2720周年集字徽章-周	
日期:2022-01-13 15:12:33
2 [报告]
发表于 2008-09-14 15:06 |只看该作者
curl_easy_init() 的事。

论坛徽章:
0
3 [报告]
发表于 2008-09-14 17:28 |只看该作者
原帖由 醉卧水云间 于 2008-9-14 15:06 发表
curl_easy_init() 的事。

如果是curl_easy_init()的问题,那我在程序里2次curl_easy_init()就应该leak掉24字节吧

结果还是12字节。

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
4 [报告]
发表于 2008-09-14 17:35 |只看该作者
inet_ntoa返回的字符串是static的,也就是说这个函数中使用的是static的char数组,并没有动态分配内存。

论坛徽章:
38
2017金鸡报晓
日期:2017-02-08 10:39:4215-16赛季CBA联赛之深圳
日期:2023-02-16 14:39:0220周年集字徽章-年
日期:2022-08-31 14:25:28黑曼巴
日期:2022-08-17 18:57:0919周年集字徽章-年
日期:2022-04-25 13:02:5920周年集字徽章-20	
日期:2022-03-29 11:10:4620周年集字徽章-年
日期:2022-03-14 22:35:1820周年集字徽章-周	
日期:2022-03-09 12:51:3220周年集字徽章-年
日期:2022-02-10 13:13:4420周年集字徽章-周	
日期:2022-02-03 12:09:4420周年集字徽章-20	
日期:2022-01-25 20:14:2720周年集字徽章-周	
日期:2022-01-13 15:12:33
5 [报告]
发表于 2008-09-14 23:01 |只看该作者
原帖由 pk9284 于 2008-9-14 17:28 发表

如果是curl_easy_init()的问题,那我在程序里2次curl_easy_init()就应该leak掉24字节吧

结果还是12字节。


curl_easy_init()不是你想得那么蠢, 不会做两次.

论坛徽章:
0
6 [报告]
发表于 2008-09-15 12:26 |只看该作者
原帖由 醉卧水云间 于 2008-9-14 23:01 发表


curl_easy_init()不是你想得那么蠢, 不会做两次.


如果是curl_easy_init()的问题,那么在curl_easy_init()后什么也不做直接curl_easy_cleanup掉应该还是会leak掉12字节吧。

结果不是!只要不调用curl_easy_perform,就不会有泄漏。

论坛徽章:
0
7 [报告]
发表于 2008-09-15 13:31 |只看该作者
去翻了curl.haxx.se上的mail列表,的确有报告curl_easy_perform内存泄漏的。

无奈E文太烂,看不了然......

论坛徽章:
0
8 [报告]
发表于 2010-06-25 11:29 |只看该作者
我也遇到了,我也怀疑是LIBCURL内存泄露,并且我加入的那个官方MAINLIST经常有人发邮件说有LEAK。我的程序,当并发下载量达到50多的时候,连续跑3个小时会有内存不足的情况。

论坛徽章:
0
9 [报告]
发表于 2010-06-25 14:16 |只看该作者
菜菜 还好没用这个库, 自己写了个库。 否则爬虫怎么跑2个月没泄漏啊

论坛徽章:
0
10 [报告]
发表于 2012-08-17 10:31 |只看该作者
真的是泄露很严重,我用的最新版本7.26.0,在同一个地方泄露得多次,很厉害呀,
大家看截图:

curl_memleak.jpg (221.98 KB, 下载次数: 38)

simple.c内存泄漏

simple.c内存泄漏
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP