如何阅读此 valgrind 信息
how to read this valgrind informations
我是 运行 一个多线程程序,我每次都会遇到
这样的错误
malloc(): memory corruption
或分段错误。
我决定使用 valgrind 来调查我的程序显示了哪种问题。首先,我得到了以下输出。有人可以帮助我了解如何阅读输出消息吗?
==17413== Conditional jump or move depends on uninitialised value(s)
==17413== at 0x47A2349: ns_name_ntop (ns_name.c:147)
==17413== by 0x47A3271: ns_name_uncompress (ns_name.c:585)
==17413== by 0x479B3EF: dn_expand (res_comp.c:93)
==17413== by 0x479FD2B: __res_queriesmatch (res_send.c:327)
==17413== by 0x47A0D19: __libc_res_nsend (res_send.c:1327)
==17413== by 0x479DDC7: __libc_res_nquery (res_query.c:226)
==17413== by 0x479E417: __libc_res_nquerydomain (res_query.c:582)
==17413== by 0x479E8FB: __libc_res_nsearch (res_query.c:416)
==17413== by 0x404B1D9: _nss_dns_gethostbyname3_r (dns-host.c:192)
==17413== by 0x404B540: _nss_dns_gethostbyname_r (dns-host.c:273)
==17413== by 0x42C53FA: gethostbyname_r@@GLIBC_2.1.2 (getXXbyYY_r.c:266)
==17413== by 0x42C4B7B: gethostbyname (getXXbyYY.c:116)
==17413== Uninitialised value was created by a stack allocation
==17413== at 0x804ADA3: UDP_Server_Open(int&, unsigned short) (UDP_Server.cpp:16)
==17413==
==17413== Use of uninitialised value of size 4
==17413== at 0x47A2382: ns_name_ntop (ns_name.c:153)
==17413== by 0x47A3271: ns_name_uncompress (ns_name.c:585)
==17413== by 0x479B3EF: dn_expand (res_comp.c:93)
==17413== by 0x479FD2B: __res_queriesmatch (res_send.c:327)
==17413== by 0x47A0D19: __libc_res_nsend (res_send.c:1327)
==17413== by 0x479DDC7: __libc_res_nquery (res_query.c:226)
==17413== by 0x479E417: __libc_res_nquerydomain (res_query.c:582)
==17413== by 0x479E8FB: __libc_res_nsearch (res_query.c:416)
==17413== by 0x404B1D9: _nss_dns_gethostbyname3_r (dns-host.c:192)
==17413== by 0x404B540: _nss_dns_gethostbyname_r (dns-host.c:273)
==17413== by 0x42C53FA: gethostbyname_r@@GLIBC_2.1.2 (getXXbyYY_r.c:266)
==17413== by 0x42C4B7B: gethostbyname (getXXbyYY.c:116)
==17413== Uninitialised value was created by a stack allocation
==17413== at 0x804ADA3: UDP_Server_Open(int&, unsigned short) (UDP_Server.cpp:16)
这意味着您在语句和 if
.
中使用了一个单元化变量
Conditional jump or move depends on uninitialised value(s)
意味着你做了类似的事情:
[...]
int i;
if (i == 0) ...
...
和
Use of uninitialised value of size 4
意味着你可能有一个取消引用的单元化指针:
struct *p;
p->toto = 0;
对于最简单的方法,获取有关错误的信息是读取类似
的输出
==17413== at 0x47A2349: ns_name_ntop (ns_name.c:147)
看看
- 文件名(
ns_name.c
)
- 行号(
147
)
- 函数名称(
ns_name_ntop
)
以及错误消息
Conditional jump or move depends on uninitialised value(s)
它基本上是说,您正在使用条件语句,例如 if
、else if
以及包含可以具有未初始化值的变量的表达式。未初始化数据的来源往往是:
- 过程中尚未初始化的局部变量。
- 堆块的内容(用
malloc()
或类似的函数分配),然后再在那里写东西。
这样,您就可以开始检查所有报告的消息了。
更多相关信息,您可以查看 Valgrind 中的 on-line manual for memcheck
工具。
==17413== Uninitialised value was created by a stack allocation
==17413== at 0x804ADA3: UDP_Server_Open(int&, unsigned short) (UDP_Server.cpp:16)
这表示在 UDP_Server.cpp 的第 16 行是对 gethostbyname
的调用,它被赋予了一个未初始化的值。
我是 运行 一个多线程程序,我每次都会遇到
这样的错误malloc(): memory corruption
或分段错误。
我决定使用 valgrind 来调查我的程序显示了哪种问题。首先,我得到了以下输出。有人可以帮助我了解如何阅读输出消息吗?
==17413== Conditional jump or move depends on uninitialised value(s)
==17413== at 0x47A2349: ns_name_ntop (ns_name.c:147)
==17413== by 0x47A3271: ns_name_uncompress (ns_name.c:585)
==17413== by 0x479B3EF: dn_expand (res_comp.c:93)
==17413== by 0x479FD2B: __res_queriesmatch (res_send.c:327)
==17413== by 0x47A0D19: __libc_res_nsend (res_send.c:1327)
==17413== by 0x479DDC7: __libc_res_nquery (res_query.c:226)
==17413== by 0x479E417: __libc_res_nquerydomain (res_query.c:582)
==17413== by 0x479E8FB: __libc_res_nsearch (res_query.c:416)
==17413== by 0x404B1D9: _nss_dns_gethostbyname3_r (dns-host.c:192)
==17413== by 0x404B540: _nss_dns_gethostbyname_r (dns-host.c:273)
==17413== by 0x42C53FA: gethostbyname_r@@GLIBC_2.1.2 (getXXbyYY_r.c:266)
==17413== by 0x42C4B7B: gethostbyname (getXXbyYY.c:116)
==17413== Uninitialised value was created by a stack allocation
==17413== at 0x804ADA3: UDP_Server_Open(int&, unsigned short) (UDP_Server.cpp:16)
==17413==
==17413== Use of uninitialised value of size 4
==17413== at 0x47A2382: ns_name_ntop (ns_name.c:153)
==17413== by 0x47A3271: ns_name_uncompress (ns_name.c:585)
==17413== by 0x479B3EF: dn_expand (res_comp.c:93)
==17413== by 0x479FD2B: __res_queriesmatch (res_send.c:327)
==17413== by 0x47A0D19: __libc_res_nsend (res_send.c:1327)
==17413== by 0x479DDC7: __libc_res_nquery (res_query.c:226)
==17413== by 0x479E417: __libc_res_nquerydomain (res_query.c:582)
==17413== by 0x479E8FB: __libc_res_nsearch (res_query.c:416)
==17413== by 0x404B1D9: _nss_dns_gethostbyname3_r (dns-host.c:192)
==17413== by 0x404B540: _nss_dns_gethostbyname_r (dns-host.c:273)
==17413== by 0x42C53FA: gethostbyname_r@@GLIBC_2.1.2 (getXXbyYY_r.c:266)
==17413== by 0x42C4B7B: gethostbyname (getXXbyYY.c:116)
==17413== Uninitialised value was created by a stack allocation
==17413== at 0x804ADA3: UDP_Server_Open(int&, unsigned short) (UDP_Server.cpp:16)
这意味着您在语句和 if
.
Conditional jump or move depends on uninitialised value(s)
意味着你做了类似的事情:
[...]
int i;
if (i == 0) ...
...
和
Use of uninitialised value of size 4
意味着你可能有一个取消引用的单元化指针:
struct *p;
p->toto = 0;
对于最简单的方法,获取有关错误的信息是读取类似
的输出 ==17413== at 0x47A2349: ns_name_ntop (ns_name.c:147)
看看
- 文件名(
ns_name.c
) - 行号(
147
) - 函数名称(
ns_name_ntop
)
以及错误消息
Conditional jump or move depends on uninitialised value(s)
它基本上是说,您正在使用条件语句,例如 if
、else if
以及包含可以具有未初始化值的变量的表达式。未初始化数据的来源往往是:
- 过程中尚未初始化的局部变量。
- 堆块的内容(用
malloc()
或类似的函数分配),然后再在那里写东西。
这样,您就可以开始检查所有报告的消息了。
更多相关信息,您可以查看 Valgrind 中的 on-line manual for memcheck
工具。
==17413== Uninitialised value was created by a stack allocation
==17413== at 0x804ADA3: UDP_Server_Open(int&, unsigned short) (UDP_Server.cpp:16)
这表示在 UDP_Server.cpp 的第 16 行是对 gethostbyname
的调用,它被赋予了一个未初始化的值。