当我使用调试器C ++时,局部变量会重置

时间:2015-03-09 09:18:51

标签: c++ segmentation-fault reset

我使用调试器来检查我的程序是否有效,但我在精确的行上得到了段错误。当我检查错误时,一个局部变量显示<no such value>。发生了什么?我检查了每个k的值,它一直工作到k = 36。如果我在一个太长的循环中使用它,你认为局部变量是否被重置?我记得我已经在k = 41的循环中使用它并且它工作得非常好。

我班级的变量:

masseVolumique= 7850;
dExterieur= 0.1778;
epaisseur= 0.019;
masseFlotteur1 = 526;
masseFlotteur2 = 94;
largeurFlotteur1 = 1.35+2;
largeurFlotteur2 = 0.83+2;
rayonBends = 0.699;
precision = 2;

定义了所有其他变量,我可以在调试器模式下看到它们的值。

int k=0;
j=0;
double theta=0;
double phi=0;
double offsetDebut;
double offsetFin;
double r=0;
int nbPos = 0;
for(int i=0;i<nbSegments;i++)
{
    theta=acos((coordonnees[i+1][0]-coordonnees[i][0])/pow(pow(coordonnees[i+1][0]-coordonnees[i][0],2)+pow(coordonnees[i+1][1]-coordonnees[i][1],2),0.5));

    phi=acos((coordonnees[i+1][2]-coordonnees[i][2])/pow(pow(coordonnees[i+1][0]-coordonnees[i][0],2)+pow(coordonnees[i+1][1]-coordonnees[i][1],2)+pow(coordonnees[i+1][2]-coordonnees[i][2],2),0.5));
    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; //segfault: precision <no such value>
        tabPos[k*5+0]=k;
        tabPos[k*5+1]=i+1;
        tabPos[k*5+2]=coordonnees[i][0]+r*cos(theta)*sin(phi);
        tabPos[k*5+3]=coordonnees[i][1]+r*sin(theta)*sin(phi);
        if(r*cos(phi)<0.01)
        {
            tabPos[k*5+4]=coordonnees[i][2];
        }
        else
        {
            tabPos[k*5+4]=coordonnees[i][2]+r*cos(phi);
        }
        k=k+1;
        j=j+1;

    }
    while (r<(segments[i]-offsetFin)) ;
}

1 个答案:

答案 0 :(得分:0)

好的问题来自tabPos长度的计算。我的计算时间太短了。在循环中,我试图访问未声明的部分tabPos。 实际上,我认为很多段错误问题来自索引问题。我现在非常小心地看这个。