我是一个C新手,正在学习valgrind。
下面是我的程序。它可以很好地编译,但是当我运行valgrind时,我看到一个"Conditional jump or move depends on uninitialised value(s)"
堆栈跟踪。
我试图找到程序中未初始化的值在哪里。当我使用"--track-origins=yes"
时,我也看到了类似的输出。
我试着看其他关于堆栈溢出的问题,但找不到一个明确的答案。
未初始化值在哪里?
代码: 1 #include <stdio.h>
2
3 int main()
4 {
5 int x = 5;
6 x = 6;
7 printf ("Hello World %dn", x);
8
9 return 0;
10 }
Valgrind输出如下。
==10154== Conditional jump or move depends on uninitialised value(s)
==10154== at 0x1003FAC3F: _platform_memchr$VARIANT$Haswell (in /usr/lib/system/libsystem_platform.dylib)
==10154== by 0x1001EEB96: __sfvwrite (in /usr/lib/system/libsystem_c.dylib)
==10154== by 0x1001F8FE5: __vfprintf (in /usr/lib/system/libsystem_c.dylib)
==10154== by 0x10021E9AE: __v2printf (in /usr/lib/system/libsystem_c.dylib)
==10154== by 0x10021EC80: __xvprintf (in /usr/lib/system/libsystem_c.dylib)
==10154== by 0x1001F4B71: vfprintf_l (in /usr/lib/system/libsystem_c.dylib)
==10154== by 0x1001F29D7: printf (in /usr/lib/system/libsystem_c.dylib)
==10154== by 0x100000F5D: main (ex1.c:7)
==10154==
Hello World 6
Valgrind可能表明未初始化的值在超出程序范围的系统库中使用,这可以从您引用的
跟踪中出现"(in/usr/lib/system/libsystem_c.dylib)"的次数来证明。这可能是也可能不是一个Valgrind错误。Valgrind在OS x上运行时有一些严重的问题,还有其他稳定的选项!我听过不少关于XCode Instruments, /usr/bin/leaks
和/usr/bin/malloc_history
的骚动,例如…