条件跳转或移动依赖于简单C程序的未初始化值



我是一个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的骚动,例如…

最新更新