循环后的分段错误
Segmentation fault after a loop
我遇到了分段错误的问题。 rayonBends 和 largeurFlotteur1 在我的 class 中被声明为 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 上出现分段错误。怎么了?循环会重置这些变量吗?我不明白。
感谢您的帮助。
您确定到达 coordonnees[nbSegments]
的值 coordonnees[i+1]
没有越界吗?
尝试将您的 for 更改为 for(int i=0;i<nbSegments-1;i++)
并查看段错误是否消失!
注意:qDebug cat 不是段错误,因为你没有取消命名指针。可能你的调试器显示了错误的编译器优化 bc,尝试使用 -O0
编译密钥来禁用它。
我遇到了分段错误的问题。 rayonBends 和 largeurFlotteur1 在我的 class 中被声明为 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 上出现分段错误。怎么了?循环会重置这些变量吗?我不明白。 感谢您的帮助。
您确定到达 coordonnees[nbSegments]
的值 coordonnees[i+1]
没有越界吗?
尝试将您的 for 更改为 for(int i=0;i<nbSegments-1;i++)
并查看段错误是否消失!
注意:qDebug cat 不是段错误,因为你没有取消命名指针。可能你的调试器显示了错误的编译器优化 bc,尝试使用 -O0
编译密钥来禁用它。