【发布时间】:2010-04-16 14:15:05
【问题描述】:
我知道调试选项下的 Visual Studio 将使用已知值填充内存。 g++(任何版本,但 gcc 4.1.2 最有趣)是否有任何选项可以 用可识别的值填充未初始化的本地 POD 结构?
struct something{ int a; int b; };
void foo() {
something uninitialized;
bar(uninitialized.b);
}
我希望uninitialized.b 是不可预测的随机性;显然是一个错误并且很容易
发现优化和警告是否打开。但是只用 -g 编译,没有
警告。一位同事有一个案例,其中与此类似的代码有效,因为它
巧合地有一个有效值;当编译器升级时,它开始失败。
他认为这是因为新编译器将已知值插入到结构中
(很像 VS 填充 0xCC 的方式)。根据我自己的经验,它只是不同
碰巧无效的随机值。
但现在我很好奇 - 是否有任何 g++ 设置可以让它填充 否则标准会说应该未初始化的内存?
【问题讨论】: