首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未初始化的自动变量强制值为随机值

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

Stack Overflow用户
提问于 2010-07-08 21:09:12
回答 3查看 274关注 0票数 2

这看起来可能是一个微不足道的问题。对不起,在这种情况下,我找不到实际的方法。我知道自动变量是未初始化的。因此,下面提供代码片段可能会转储到block-2中

代码语言:javascript
复制
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平台。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-08 21:16:21

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

由于堆栈段没有存储在可执行文件的磁盘文件映像中,因此OS必须在程序开始时为堆栈分配新的页面。它们最初是作为零填充的出现的,与.bss相同。堆栈的这种初始零填充是历史的。有人试图“简化”它,而不是这样做。太多的程序被破坏了,所以这一举动被放弃了。

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

票数 1
EN

Stack Overflow用户

发布于 2010-07-08 21:18:26

您不需要静态分析工具-只需使用-Wall标志进行编译,就可以让编译器警告您这个问题。不要寻找“创可贴”解决方案--只需自己初始化变量即可。

票数 6
EN

Stack Overflow用户

发布于 2010-07-08 21:12:51

首先,为什么你想要在运行时这样做,而你很可能通过编译器警告或静态分析器更快、更容易地捕捉到它?

我不知道编译器标志可以做您想要做的事情,但是我非常确定外部工具,例如valgrind和Purify可以监控这样的事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3203885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档