在我的一个类方法声明中,我使用for循环和数组,我得到一个特别奇怪的错误。看起来我前一个循环的循环初始化会影响我下一个循环中的结果。这是我的代码:
void shape::AssignTopLeftCorner()
{
for (int i=0; i<3; i++); /this for loop affects the results...
int temp[4][2];
temp[0][0]=verticies[0][0];
temp[0][1]=verticies[0][1];
int topLeft;
for(int i=1; i<4; i++)//..of this for loop
{
if(verticies[i][1]>temp[0][i])
{
topLeft=i;
temp[0][0]=verticies[i][0];
temp[0][1]=verticies[i][1];
}
}
}
如果我在最上面的循环中将'i&lt; 3'更改为'i&lt; 4',我会得到不同的结果,即使它什么都不做!这个问题只取决于计算机,但我不知道是什么导致它。我已经做过记忆测试了。可能是我的主板吗? OS?有任何想法吗? 我正在使用Dev C ++ 4.9.9.2
答案 0 :(得分:1)
我怀疑问题的一部分是你正在访问temp
的无效元素:
int temp[4][2];
// ...
for(int i=1; i<4; i++)//..of this for loop
{
if(verticies[i][1]>temp[0][i])
temp
的第二个维度只有两个元素(因此唯一有效的索引为0
和1
)您尝试访问temp[0][1]
,temp[0][2]
,和temp[0][3]
。
修改:此外,
for (int i=0; i<3; i++); /this for loop affects the results...
...是一个没有身体的循环。除了可能烧掉几个CPU周期外,它什么都不做,并且很可能不会影响下面的代码。
答案 1 :(得分:0)
尝试类似:
int temp[2];
temp[0]=verticies[0][0];
temp[1]=verticies[0][1];
int topLeft=0;
for(int i=1; i<4; i++)//..of this for loop
{
if(verticies[i][1]>temp[1] && verticies[i][0]>temp[0])
{
topLeft=i;
temp[0]=verticies[i][0];
temp[1]=verticies[i][1];
}
}
注意 - 您可能需要调整条件的方向以在坐标系中左上角。