当内存调试使用Valgrind
因为我通过了以下错误迎来了通常的原因我的程序(有很多人):奇怪的valgrind错误
==9895== Invalid read of size 4
==9895== at 0x10D6C1: Shell (vshell.c:903)
==9895== by 0x113608: exec_wrap (vib.c:111)
==9895== by 0x111E8A: sm_thread (vproc.c:123)
==9895== by 0x1107EC: tstart (vsched.c:130)
==9895== by 0x55B3A8F: ??? (in /lib/x86_64-linux-gnu/libc-2.24.so)
==9895== Address 0x5973e90 is 134,800 bytes inside a block of size 135,168 alloc'd
==9895== at 0x4C300B6: memalign (vg_replace_malloc.c:858)
==9895== by 0x1106D0: alloc_thread (vsched.c:95)
==9895== by 0x110825: sthread (vsched.c:144)
==9895== by 0x112030: Exec (mproc.c:183)
==9895== by 0x1137D9: Execute (vlib.c:166)
==9895== by 0x10D9A5: bshell (shell.c:965)
==9895== by 0x111E8A: smain_thread (mproc.c:123)
==9895== by 0x1107EC: tstart (vsched.c:130)
==9895== by 0x55B3A8F: ??? (in /lib/x86_64-linux-gnu/libc-2.24.so)
探测通常的地方(如在这里,Valgrind
“ s手册和谷歌)没有产生任何见解,为什么会发生这种情况。据我了解,从错误消息分配的块是大于比地址指的是,所以我不明白“抱怨”。正如我最初所说的那样,有许多消息完全像这样,但代码的不同部分 - 这只是一个指示性错误。值得注意的是,当程序退出时没有实际的泄漏,按照Valgrind
- 只是这些错误。任何人都可以提供任何见解,为什么发生这种情况?
“大小4的读取无效”意味着您尝试读取尚未分配内存的32位值。在32位系统上,它可能是一个指针,否则可能是你取消引用未初始化的指针来读取“int”。或类似的东西。梳理你的代码来寻找未初始化的局部变量。此外,构建启用了许多警告,并修复您获得的所有警告。 –
看起来您正在从您从未写过的内存中读取数据,并且您正在从奇数内存地址读取一个4字节值。 –
什么是源代码?你可以尝试使用gdb服务器吗? –