我使用的是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
答案 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];