循环后的分段错误

时间:2015-03-05 10:02:55

标签: c++ qt segmentation-fault

我遇到了分段故障的麻烦。 rayonBends和largeurFlotteur1在我的类中声明为public double。这是我的代码:

qDebug()<<largeurFlotteur1; //1.35
qDebug()<<rayonBends; //0.699
k=0;
int j=0;
double alpha;
double offsetDebut;
double offsetFin;
double r=0;
double tabPos[nbFlotteur1][4];
for(int i=0;i<nbSegments;i++)
{
   if((coordonnees[i+1][0]-coordonnees[i][0])==0)
   {
       alpha=M_PI/2;
   }
   else
   {
       alpha=atan((coordonnees[i+1][1]-coordonnees[i][1])/(coordonnees[i+1][0]-coordonnees[i][0]));
   }

   if(i==0)
   {
       offsetDebut=3+largeurFlotteur1/2;
   }
   else
   {
       offsetDebut=rayonBends+largeurFlotteur1/2;
   }

   if(i==(nbSegments-1))
   {
       offsetFin=3+largeurFlotteur1/2;
   }
   else
   {
       offsetFin=rayonBends+largeurFlotteur1/2;
   }
    j=0;

    do
    {
        r=j*precision+offsetDebut;
        tabPos[k][0]=k;
        tabPos[k][1]=i;
        tabPos[k][2]=r*cos(alpha);
        tabPos[k][3]=r*cos(alpha);
        k=k+1;
        j=j+1;
    }
    while (r<(segments[i]-offsetFin)) ;
}
qDebug()<<largeurFlotteur1; //Segmentation fault
qDebug()<<rayonBends; //Segmentation fault

我得到了:

1.35
0.699

然后在两端的qDebug上进行分段错误。怎么了?循环是否重置这些变量?我不明白。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

您确定,coordonnees[i+1]的值coordonnees[nbSegments]不会超出范围吗?

尝试将您的for更改为for(int i=0;i<nbSegments-1;i++)并查看segfault是否消失!

注意:qDebug cat不是段错误bc你不要取消命名指针。 probabbly ur debugger显示错误的编译器优化bc,尝试使用-O0编译键来禁用它。