问题描述
- 急急急,用gdb调试程序出现段错误
-
出错的函数如下:
NodeTp*Crt(int n,char b[],char jj[])
{int i;
NodeTp *p,*h,*last;
CreateNode(h);
last=h;
for(i=0;i
{
if(jj[i]=='2')
{
CreateNode(p);
if(b[i]=='1')
{
p->pf[0]=a[i][0];
p->pf[1]=a[i][1];
p->pf[2]=a[i][2];
p->SA=0;
last->next=p;
last=p;
}
else
{
p->SA=2*a[i][1];
p->pf[0]=a[i][2];
p->pf[1]=a[i][1];
p->pf[2]=a[i][0];
last->next=p;
last=p;
}
}else
{if((jj[i]=='1')&&(b[i]=='1'))
{
CreateNode(p);
p->SA=2*a[i][1];
p->pf[0]=a[i][2];
p->pf[1]=a[i][1];
p->pf[2]=a[i][0];
last->next=p;
last=p;
}
else{if((jj[i]=='0')&&(b[i]=='1'))
{
CreateNode(p);
p->pf[0]=a[i][0];
p->pf[1]=a[i][1];
p->pf[2]=a[i][2];
p->SA=0;
last->next=p;
last=p;
}
else
{if((jj[i]=='1')&&(b[i]=='0'))
{
CreateNode(p);
p->pf[0]=1;
p->pf[1]=1;
p->pf[2]=1;
p->SA=0;
last->next=p;
last=p;
}
else{
CreateNode(p);
p->pf[0]=1;
p->pf[1]=1;
p->pf[2]=1;
p->SA=0;
last->next=p;
last=p;
}
}
}
}
}
last->next=NULL;
return h;}
用gdb调试出现:
Program received signal SIGSEGV, Segmentation fault.
0x080491c4 in Crt (n=12, b=0x3e680000, jj=0x804dfd8 "200111101100") at unconsider2.c:231
if(b[i]=='1')
根据gdb的提示信息说是b数组越界访问,但总找不出具体错误在哪,还请大神指教!
解决方案
有没有为node next等分配内存,指针和数组有没有越界。
你可以上传完整的源代码到codepad.org,并且将链接贴出来,好帮你调试。
解决方案二:
数组索引i是否在正确范围