【发布时间】:2015-02-05 14:04:20
【问题描述】:
我们最近在我们的软件中发现了一个严重错误,该错误是由于假设动态分配的数组已初始化为零(而事实并非如此)而引起的。所以问题是这样的:
int* foo = new int[1];
foo[0] += 10;
我现在正试图估计这种影响,因为最近我们的环境也发生了一些变化:我们开始使用运行不同操作系统的新处理单元(以前的 Win XP,仍在使用,现在除了一些运行 Win 8 的新单元)。
在 Win XP 机器上运行的计算似乎没有问题,但在 Win 8 上,相同的二进制文件会产生乱码。所以编译器不会初始化这些数组(这些是优化的构建),但似乎 Windows XP 确实将新分配的内存初始化为零(而 Windows 8 没有)。这是在某个地方记录的吗?我可以相信这一点,因此我可以假设这个问题不会影响以前在 Win XP 机器上执行的所有计算吗?
【问题讨论】:
-
你也开始使用新的 IDE 了吗?
-
只需在每个此类分配的末尾添加
()即可将数组归零。不需要重新运行单元测试等。首先,依赖操作系统保证充其量是有风险的,而且当您知道必须支持您知道的平台(Win 8)时,无论如何都不是前进的道路没有这样的保证。 -
你在什么平台上编译你的程序?
-
@dmg 几个月前我们已经更换了编译器,是的。但在这种情况下,相同的二进制文件在两种类型的处理单元上运行。
-
@ʎǝʞuoɯɹǝqʎɔ 我们正在 Windows 7 上编译。