我们最近在软件中发现了一个严重的错误,这个错误是由于假设一个动态分配的数组被初始化为零(而不是)。所以,问题是这样的:Windows XP是否自动将数组初始化为零?
int* foo = new int[1];
foo[0] += 10;
现在我想的估计,因为最近我们也有我们的环境中进行一些更改这方面的影响:我们开始使用它运行不同的操作系统新的处理单元( Win XP之前,现在还在使用,现在除了一些运行Win 8的新单元外)。
在Win XP机器上运行的计算似乎没有问题,但在Win 8上,相同的二进制文件会产生乱码。所以编译器不会初始化这些数组(这些都是经过优化的版本),但似乎Windows XP会将新分配的内存初始化为零(而Windows 8不会)。这是有记录的地方吗?我能否相信这一点,以便我可以认为这个问题不会影响以前在Win XP机器上执行的所有计算?
你是否也开始使用新的IDE? – dmg 2015-02-05 14:12:57
只需在每个这样的分配末尾添加'()',以将数组归零。应该不需要重新运行单元测试等等。依靠操作系统保证首先是充满风险的,当你知道你必须支持一个你认识的平台(Win 8)时,无论如何也不是一个前进的方向没有这样的保证。 – 2015-02-05 14:14:07
你在什么平台上编译你的程序? – cybermonkey 2015-02-05 14:14:31