linux mysql_real_connect_linux mysql mysql_real_connect函数导致内存泄露

自己写个了个小东西,Linux下C语言,数据库使用的mysql,用valgrind调试的时候一直提示内存泄露,问题都没找到,后来搜索了一下,最后发现是mysql_real_connect惹的祸。

提示的错误:

==11867== 24,528 bytes in 6 blocks are possibly lost in loss record 4 of 5

==11867== at 0x4025BD3: malloc (vg_replace_malloc.c:236)

==11867== by 0x408F53D: my_once_alloc (in /usr/lib/libmysqlclient.so.16.0.0)

==11867== by 0x408FDB8: ??? (in /usr/lib/libmysqlclient.so.16.0.0)

==11867== by 0x4090889: ??? (in /usr/lib/libmysqlclient.so.16.0.0)

==11867== by 0x4090ADB: get_charset_by_csname (in /usr/lib/libmysqlclient.so.16.0.0)

==11867== by 0x40B3211: mysql_init_character_set (in /usr/lib/libmysqlclient.so.16.0.0)

==11867== by 0x40B52DB: mysql_real_connect (in /usr/lib/libmysqlclient.so.16.0.0)

==11867== by 0x804DCBE: testDbState (database.c:19)

==11867== by 0x8049811: main (main.c:5)

==11867==

==11867== 28,616 bytes in 7 blocks are possibly lost in loss record 5 of 5

==11867== at 0x4025BD3: malloc (vg_replace_malloc.c:236)

==11867== by 0x408F53D: my_once_alloc (in /usr/lib/libmysqlclient.so.16.0.0)

==11867== by 0x408FD99: ??? (in /usr/lib/libmysqlclient.so.16.0.0)

==11867== by 0x4090889: ??? (in /usr/lib/libmysqlclient.so.16.0.0)

==11867== by 0x4090ADB: get_charset_by_csname (in /usr/lib/libmysqlclient.so.16.0.0)

==11867== by 0x40B3211: mysql_init_character_set (in /usr/lib/libmysqlclient.so.16.0.0)

==11867== by 0x40B52DB: mysql_real_connect (in /usr/lib/libmysqlclient.so.16.0.0)

==11867== by 0x804DCBE: testDbState (database.c:19)

==11867== by 0x8049811: main (main.c:5)

==11867==

==11867== LEAK SUMMARY:

==11867== definitely lost: 0 bytes in 0 blocks

==11867== indirectly lost: 0 bytes in 0 blocks

==11867== possibly lost: 53,144 bytes in 13 blocks

==11867== still reachable: 8,192 bytes in 3 blocks

==11867== suppressed: 0 bytes in 0 blocks

==11867==

==11867== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 37 from 12)

--11867--

--11867-- used_suppression: 37 dl-hack3-cond-1

==11867==

==11867== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 37 from 12)

原来使用mysql_real_connect之后,断开连接后必须得mysql_library_end();

mysql_close(conn);

conn=NULL;

mysql_library_end();

这样再次调试就不出错了,看到这句话

ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 37 from 12)

我激动啊。

valgrind --db-attach=yes --leak-check=full --show-reachable=yes  --tool=memcheck -v ./main

--10599-- REDIR: 0x42ac880 (strnlen) redirected to 0x4026c50 (strnlen)

--10599-- Discarding syms at 0x4836a20-0x483de08 in /lib/libnss_files-2.12.1.so due to munmap()

--10599-- Discarding syms at 0x402c8b0-0x402d6c8 in /lib/libnss_mdns4_minimal.so.2 due to munmap()

--10599-- Discarding syms at 0x4030bb0-0x4033bd8 in /lib/libnss_dns-2.12.1.so due to munmap()

--10599-- Discarding syms at 0x5458630-0x54646d8 in /lib/libresolv-2.12.1.so due to munmap()

==10599==

==10599== HEAP SUMMARY:

==10599== in use at exit: 0 bytes in 0 blocks

==10599== total heap usage: 3,255 allocs, 3,255 frees, 82,930,848 bytes allocated

==10599==

==10599== All heap blocks were freed -- no leaks are possible

==10599==

==10599== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 37 from 12)

--10599--

--10599-- used_suppression: 37 dl-hack3-cond-1

==10599==

==10599== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 37 from 12)

1

0

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2011-02-11 11:58

浏览 3404

评论

2 楼

pipal

2013-02-18

烟雨遥_sun 写道

很强大,正好遇到这个问题,感谢楼主分享!

75a3bf8974c9bd5a56863a745113d139.gif

1 楼

烟雨遥_sun

2013-01-30

很强大,正好遇到这个问题,感谢楼主分享!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值