为什么将值分配给数组中的下一个元素

时间:2015-03-29 18:44:36

标签: c++ arrays visual-studio-2012 structure

我使用的是Visual Studio 12,我创建了一个非常简单的结构数组:

struct testFloatStruct {
   double A;
   double B;
};
struct testFloatStruct threeSetsOfFloats[4];

这总共创建了六个值,我可以毫不费力地为这六个中的第一个赋值,即元素[0] .A

但是,当我为其他任何一个值分配值时,跟随值会被更改。例如,当我这样做时:

threeSetsOfFloats[0].B = 0.2;

调试器显示,只要执行该语句,数组中的以下元素 [1] .A 就会获得一个奇怪的值。

我以前使用Borland编译器时对Visual Studio不太熟悉,所以我不知道我是否设置了数百个编译器选项的错误。

我简化了这个测试项目,只有六个赋值语句。我有两个屏幕图像和更多信息,以及项目的zip文件,以便您可以自己尝试:

http://www.hugequestions.com/c/Array_of_structures_problem.html

1 个答案:

答案 0 :(得分:0)

在调试器中使用以下测试在每次迭代期间通过for循环显示正确的值

struct testFloatStruct {
   double A;
   double B;
};
struct testFloatStruct threeSetsOfFloats[4];

for (int i = 0; i < 4; i++) {
    threeSetsOfFloats[i].A = 0.43;
    threeSetsOfFloats[i].B = 0.32;
}
for (int i = 0; i < 4; i++) {
    cout << threeSetsOfFloats[i].A << endl;
    cout << threeSetsOfFloats[i].B << endl;
}

现在,我确实在内存中看到了数组中未初始化数据的随机值。您应该能够通过初始化结构变量来阻止它:

struct testFloatStruct {
   double A;
   double B;

   testFloatStruct() {
   A = 0;
   B = 0;
   }
};
struct testFloatStruct threeSetsOfFloats[4];