可以gcc
以某种方式初始化未初始化的指针NULL
吗?
在工作中,我们在gcc 4.1.2和Sun Studio 12上构建我们的软件。在 Red Hat Enterprise Linux 上运行的 gcc 版本已经运行了好几个月,每周运行 5 天。
不过,我们刚刚推出了我们的 Solaris 版本,它每天都会在启动时崩溃。
堆栈跟踪将我们带到这样的代码:
if( _timer == NULL ) {
_timer = new Timer(bunch, of, parameters);
}
_timer->StartTimer(_timeout);
我们已经确定_timer
没有在任何地方初始化。所以我们认为_timer
必须设置为垃圾数据,与 比较失败NULL
,然后在StartTimer
没有构建计时器的情况下被 'ed。
这项工作实际上已分配给我的同事,他正在验证这一点。但与此同时,我很好奇:为什么我们的 Linux (gcc) 构建从来没有崩溃过?我可以向你保证这是相同的代码——我们使用 Perforce 和严格的标签。我读到编译器不会初始化未初始化的指针,所以我很困惑。
确认gcc 4.1.2
绝对不能自动初始化未初始化的指针,将回答这个问题。或者,它可能的方式。