我发表这篇文章代表我的大学。
他发现了一个可疑的内存泄漏使用handle_option时(MySQL的getopt的LIB)来读取配置文件(/etc/my.cnf中)
他的malloc HOST_NAME后,再执行下面的源代码,用户名:
char* host_name;
char* user_name;
struct my_option mysql_confgs[] =
{
{"host", "h", "MySQL Server", (uchar**) & host_name, NULL, NULL, GET_STR,
REQUIRED_ARG, 0,0,0,0,0,0},
{"user", "u", "userID", "h",(uchar**) & user_name, NULL, NULL, GET_STR,
REQUIRED_ARG, 0,0,0,0,0,0}
}
handle_options(&argc, &argv, mysql_configs, aux_config_reader);
他提到上面的方法是使用错误(段),而不是使用免费(主机名)和免费(用户名)?所以这是造成内存泄漏的可能原因?
嗯..我在MySQL上没有基本的东西,所以我可能无法交付100%的问题描述。因此,请随时查询,我将根据查询更新问题描述的详细信息。
我的大学有语言障碍,所以我代表他发布信息。
Valgrind的报告:
480 bytes in 1 blocks are possibly lost in loss record 26 of 43
at 0x4A068FE: malloc (vg_replace_malloc.c:270)
by 0x33E4E293C1: my_malloc (in /usr/lib64/mysql/libmysqlclient.so.16.0.0)
by 0x33E4E2C974: alloc_root (in /usr/lib64/mysql/libmysqlclient.so.16.0.0)
by 0x33E4E2E620: ??? (in /usr/lib64/mysql/libmysqlclient.so.16.0.0)
by 0x33E4E2F838: my_load_defaults (in /usr/lib64/mysql/libmysqlclient.so.16.0.0)
by 0x408BF1: MS_MYSQL_init (MS_MYSQL_O.h:109)
by 0x438A39: main_proc (AccLab.c:221)
by 0x437F8A: main (AccLab.c:67)
75,840 bytes in 158 blocks are definitely lost in loss record 41 of 43
at 0x4A068FE: malloc (vg_replace_malloc.c:270)
by 0x33E4E293C1: my_malloc (in /usr/lib64/mysql/libmysqlclient.so.16.0.0)
by 0x33E4E2C974: alloc_root (in /usr/lib64/mysql/libmysqlclient.so.16.0.0)
by 0x33E4E2E620: ??? (in /usr/lib64/mysql/libmysqlclient.so.16.0.0)
by 0x33E4E2F838: my_load_defaults (in /usr/lib64/mysql/libmysqlclient.so.16.0.0)
by 0x408BF1: MS_MYSQL_init (MS_MYSQL_O.h:109)
by 0x438A39: main_proc (AccLab.c:221)
by 0x437F8A: main (AccLab.c:67)
泄漏摘要:
definitely lost: 75,840 bytes in 158 blocks
indirectly lost: 0 bytes in 0 blocks
possibly lost: 2,304 bytes in 7 blocks
still reachable: 9,675,408 bytes in 2,387 blocks
suppressed: 0 bytes in 0 blocks
Reachable blocks (those to which a pointer was found) are not shown.
To see them, rerun with: --leak-check=full --show-reachable=yes
For counts of detected and suppressed errors, rerun with: -v
ERROR SUMMARY: 8 errors from 8 contexts (suppressed: 4 from 4)
将host_name和user_name更改为'uchar *'可能是一个好主意,以避免从'char **'到'uchar **'的转换不是很好定义。 – Sebivor 2013-03-22 01:38:46
您是否考虑过使用valgrind来确定哪块内存在泄漏? – Sebivor 2013-03-22 01:47:19
Ivalue,我刚刚更新了帖子。我们运行Valgrind并检查内存泄漏。事实上,这是我们第一次使用Valgrind,所以如何从上面解释Valgrind报告? – jhyap 2013-03-22 06:05:37