这看起来可能是一个微不足道的问题。对不起,在这种情况下,我找不到实际的方法。我知道自动变量是未初始化的。因此,下面提供代码片段可能会转储到block-2中
char *p;
if(NULL == p)
{
//do something block-1 statement
}
else
{
//do something else block-2 statement
} 现在,在大多数平台中,自动变量的缺省值不是0就是NULL,特别是SUSE Linux风格。
问题
a.如果未初始化,是否有任何编译器标志或任何其他选项会强制将局部变量设置为“垃圾”值?
PS :我知道静态分析器工具可以很容易地检测出问题。我只想知道这是否可以在运行时通过一些标志/选项设置来完成。
我使用的是SUSE10/HP-UX和AIX平台。
发布于 2010-07-08 21:16:21
您在这里看到的是Unix上内存通常是如何分配给进程的工件。
由于堆栈段没有存储在可执行文件的磁盘文件映像中,因此OS必须在程序开始时为堆栈分配新的页面。它们最初是作为零填充的出现的,与.bss相同。堆栈的这种初始零填充是历史的。有人试图“简化”它,而不是这样做。太多的程序被破坏了,所以这一举动被放弃了。
运行你的程序一段时间,进行多个函数调用,最终你会在堆栈上看到“垃圾”:)
发布于 2010-07-08 21:18:26
您不需要静态分析工具-只需使用-Wall标志进行编译,就可以让编译器警告您这个问题。不要寻找“创可贴”解决方案--只需自己初始化变量即可。
发布于 2010-07-08 21:12:51
首先,为什么你想要在运行时这样做,而你很可能通过编译器警告或静态分析器更快、更容易地捕捉到它?
我不知道编译器标志可以做您想要做的事情,但是我非常确定外部工具,例如valgrind和Purify可以监控这样的事情。
https://stackoverflow.com/questions/3203885
复制相似问题