1

在我使用 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<3' 更改为 'i<4' 我会得到不同的结果,即使它什么也没做!此问题仅与计算机有关,但我不知道是什么原因造成的。我已经做过记忆测试。会不会是我的主板?操作系统?有任何想法吗?我正在使用 Dev C++ 4.9.9.2

4

2 回答 2

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只有两个元素(因此唯一有效的索引是01)您尝试访问temp[0][1]temp[0][2]temp[0][3]

编辑:此外,

 for (int i=0; i<3; i++); /this for loop affects the results...    

...是一个没有主体的循环。除了可能会消耗几个 CPU 周期外,这没有任何作用,而且很可能不会影响下面的代码。

于 2013-10-30T23:07:19.227 回答
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];
            }
    }

注意 - 您可能需要调整条件的方向才能在坐标系中处于左上角。

于 2013-10-30T23:11:34.080 回答