在其范围之外初始化for循环腐败

时间:2013-10-30 23:01:25

标签: c++ memory memory-leaks

在我的一个类方法声明中,我使用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

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的第二个维度只有两个元素(因此唯一有效的索引为01)您尝试访问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];
            }
    }

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