【发布时间】:2015-05-10 09:38:37
【问题描述】:
我正在使用调试器检查我的程序是否正常工作,但我在精确的行上遇到了段错误。当我检查出了什么问题时,一个局部变量显示<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)) ;
}
【问题讨论】:
-
可能存在一些溢出,可能会间接为您的
precision变量设置错误值。检查您的阵列大小、访问权限等。我们没有足够的信息来帮助您。 -
tabPos[k*5+0]=k;你的 tabPos 够长吗? -
在问题中显示所有相关代码
-
感谢 Thomas,我想我找到了问题所在。我的 tabPos 不够长。好吧,实际上它已经足够长了,但是我的循环中有太多的迭代。我正在看这个。
标签: c++ segmentation-fault reset