不知何故,Valgrind在我的程序的第一行显示了一个错误:
int main(int argc, char** argv) {
int i, r;
sscanf(argv[1], "%d", &r);
return 0;
}
瓦尔格林德报道:
==18674== Invalid read of size 1
==18674== at 0x4ECB1A0: rawmemchr (in /usr/lib64/libc-2.23.so)
==18674== by 0x4EB2F41: _IO_str_init_static_internal (in /usr/lib64/libc-2.23.so)
==18674== by 0x4EA16C6: __isoc99_vsscanf (in /usr/lib64/libc-2.23.so)
==18674== by 0x4EA1666: __isoc99_sscanf (in /usr/lib64/libc-2.23.so)
==18674== by 0x400DE3: main (test_b_arbre.c:18)
==18674== Address 0x0 is not stack'd, malloc'd or (recently) free'd
==18674==
==18674==
==18674== Process terminating with default action of signal 11 (SIGSEGV)
==18674== Access not within mapped region at address 0x0
==18674== at 0x4ECB1A0: rawmemchr (in /usr/lib64/libc-2.23.so)
==18674== by 0x4EB2F41: _IO_str_init_static_internal (in /usr/lib64/libc-2.23.so)
==18674== by 0x4EA16C6: __isoc99_vsscanf (in /usr/lib64/libc-2.23.so)
==18674== by 0x4EA1666: __isoc99_sscanf (in /usr/lib64/libc-2.23.so)
==18674== by 0x400DE3: main (test_b_arbre.c:18)
我经历了一些类似的问题,但我没有找到解决方法......我如何运行程序:
valgrind --leak-check=yes --track-origins=yes ./b_arbre 1 2 3 4 5 6
我在 64 位 Linux 上编译了您的确切程序x86_64(在您的 Valgrind 输出中看到 64 位库的提示(。此问题不会重现。我收到一个关于sscanf
隐式声明不正确的警告,但这是一个红鲱鱼。
我还尝试了64位Power PC Linux。干净的瓦尔格林德也。
(当然,如果在没有参数的情况下调用程序,则会发生空指针取消引用,在这种情况下,argv[argc]
完成;但该问题被描述为与参数一起发生。
问题可能是正在测试的可执行文件与源代码不匹配。
你在调用它时没有参数,所以argv[1]
是一个空指针。 通过提供命令行参数来"修复"它。 通过检查argc
并在 1 时执行其他操作来正确修复它。