代码之家  ›  专栏  ›  技术社区  ›  kumar_m_kiran

未初始化的自动变量强制值为随机值

  •  2
  • kumar_m_kiran  · 技术社区  · 15 年前

    char *p;  
    if(NULL == p)  
    {  
       //do something  block-1 statement
    }  
    else  
    {  
      //do something else  block-2 statement
    }  
    

    现在,在大多数平台中,自动变量的默认值是0或NULL,尤其是suselinux风格。

    问题

    PS:我知道静态分析器工具可以很容易地检测到问题。我只是想知道这是否可以在运行时通过一些标志/选项设置来实现。

    我使用的是suse10/HP-UX和AIX平台。

    3 回复  |  直到 15 年前
        1
  •  1
  •   Nikolai Fetissov    15 年前

    您在这里看到的是通常如何将内存分配给Unix上的进程的工件。

    零填充 最初,与 .bss . 堆栈的初始零填充是历史性的。有人试图“简化”它,不这样做。太多的程序中断了,所以这一行动被放弃了。

    运行程序一段时间,进行多个函数调用,-最终会在堆栈上看到“垃圾”:

        2
  •  6
  •   anon anon    15 年前

        3
  •  1
  •   Mark B    15 年前

    首先,在运行时使用编译器警告或静态分析器可以更快、更容易地捕捉到它时,为什么要这样做?

    我不知道编译器标志可以做你想做的事情,但是我很确定外部工具,比如valgrind和Purify可以监视这样的事情。