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

Local variable resets when I'm using the debugger C++

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

我的变量 class:

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)) ;
}

好的,问题出在tabPos长度的计算上。我计算的长度太短了。在循环中,我试图访问未声明的 tabPos 部分。 实际上,我认为很多段错误问题都来自索引问题。我现在会非常仔细地看一下。