这段代码一次执行良好,另一次出现分段错误

Posted

技术标签:

【中文标题】这段代码一次执行良好,另一次出现分段错误【英文标题】:This piece of code executes fine once and gives segmentation fault the other time 【发布时间】:2020-06-08 11:35:17 【问题描述】:

我有宝石对象 gems[10][10],它有一个属性颜色。我想在具有相同颜色的列中获得三个或更多连续的宝石,并改变它们的颜色。下面的代码一次运行良好,而另一次出现分段错误。是什么导致随机运行中的分段错误。

    bool findMatch()
        for(int i=0;i<10;++i)      // To check ForVertical matchces
            for(int j=1;j<10;++j)
                int count=0;
                int a=0;
                if(gems[j][i].getColor()==gems[j-1][i].getColor())
                    a=j;
                    count++;
                    while(gems[a][i].getColor()==gems[j][i].getColor() && a<10)
                        count++;
                        a++;
                    
                
             if(count>=3)
                 for(int x=j-1, itr=0;itr<count;++itr,++x)
                     gems[x][i].setColor(7);
                 
                    glutPostRedisplay();
                 for(int x=j-1, itr=0;itr<count;++x,++loop)
                     gems[x][i].setColor(GetRandInRange(0,7));
                 ;
                 return true;
             
            
        
return false;

【问题讨论】:

请提供一个minimal reproducible example,估计x中的gems[x][i].setColor超出了数组范围 【参考方案1】:
 while(gems[a][i].getColor()==gems[j][i].getColor() && a<10)

a 达到 10 的值时,这里。 gems[10]a&lt;10 比较之前被评估。由于这超出了数组的大小,因此会导致未定义的行为。

【讨论】:

以上是关于这段代码一次执行良好,另一次出现分段错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥在某些机器上堆栈溢出,但在另一台机器上出现分段错误?

从堆栈读取时出现分段错误

这段代码中的错误/错误是啥 c++ 告诉我更正?

如何检查 LPTSTR 字符串的内容?

总线错误与分段错误

带有 std::promise 的 C++11 分段错误