能帮我用gdb看看哪里有段错误吗



```c
#include <stdio.h>
#include <string.h>
int main()
{
    while(1)
    {
    char num[2][105];
    for(int i =0;i<105;i++)
    {num[1][i]='0';
   num[0][i]='0';
    }
    int result[105]={0};
    int i=1;
    int j=0;
    char temp =' ';
    int mark[2];//0-1
    int temp2=0;


   while(scanf("%c",&temp))
   {
    if(temp=='\n')
    {
        mark[j]=i;
        break;
    }
    if(temp==' ')
    {
        mark[j]=i;
        j+=1;
        i=1;
        continue;
    }
    num[j][i]=temp;
    i++;

   }//读入数据,mark存了两个数字




   if(mark[0]>mark[1])//mark 中的位数都是比实际多一位的 1234 456
   {
       int c=mark[0]-1;//4
       int d=mark[1]-1;//3
       for(;d>0;c--,d--)
       {
        num[1][c]=num[1][d];
        num[1][d]='0';
       }
       temp2=mark[0]-1;
   }
    else if(mark[0]<mark[1])//mark 中的位数都是比实际多一位的
   {
       int c=mark[0]-1;//4
       int d=mark[1]-1;//3
       for(;c>0;c--,d--)
       {
        num[0][d]=num[0][c];
        num[0][c]='0';
       }
       temp2=mark[1]-1;
    
   }
   else{temp2=mark[0]-1;}
    //加法运算
    int temp3=temp2;
    for(;temp2>0;temp2--)
    {
        int sum=0;
        sum=num[0][temp2]+num[1][temp2]-96;
        result[temp2]=sum;
    }
    for(int n=temp3;n>=0;n--)
    {
        if(result[n]>=10)
        {
            result[n-1]+=1;
            result[n]%=10;
        }

    }
    for(int n=0;n<=temp3;n++)
    {
        if(n==0&&result[n]==0)
        continue;
        if(n==temp3)
        {
            printf("%d\n",result[n]);
            break;
        }
        printf("%d",result[n]);
    }

    }

return 0;
}

```

把变量的声明都放在函数的开头,代码修改如下:



#include <stdio.h>
#include <string.h>
int main()
{
    int i,j,mark[2],k,p;
    char num[2][105]={0},temp,ch;
    char result[105],x,y;
    
    while(1)
    {
        mark[0]=0;
        mark[1]=0;
        i=0;j=0;
        while(scanf("%c",&temp))
        {
            if(temp=='\n')
            {
                mark[j]=i;
                i=0;
                j=0;
                break;
            }
            else if(temp==' ')
            {
                mark[j]=i;
                j+=1;
                i=0;
                if(j>=2) 
                {
                    j=0;
                    break;
                }
            }else
            {
                num[j][i]=temp;
                i++;
            }
        }//读入数据,mark存了两个数字

        //字符串逆序
        for (k=0,p=mark[0]-1;k<p;k++,p--)
        {
            ch = num[0][k];
            num[0][k] = num[0][p];
            num[0][p] = ch;
        }
        for (k=0,p=mark[1]-1;k<p;k++,p--)
        {
            ch = num[1][k];
            num[1][k] = num[1][p];
            num[1][p] = ch;
        }
        //累加
        x = 0;
        p = 0; //进位值
        for (k=0;k<mark[0]&&k<mark[1];k++)
        {
            y = (num[0][k] - '0') + (num[1][k]-'0') + p;
            result[x] = '0' + y%10;
            p = y/10;
            x++;
        }
        if (k==mark[0] && k==mark[1]) //位数相同
        {
            if(p)
            {
                result[x] = '0' + p;
                x++;
            }
        }else if (k==mark[0] && k<mark[1])
        {
            for (;k<mark[1];k++)
            {
                y = (num[1][k] - '0') + p;
                result[x] = '0' + y%10;
                p = y/10;
                x++;
            }
        }else
        {
            for (;k<mark[0];k++)
            {
                y = (num[0][k] - '0') + p;
                result[x] = '0' + y%10;
                p = y/10;
                x++;
            }

        }

        //显示
        for (k=x-1;k>=0;k--)
        {
            printf("%c",result[k]);
        }
        printf("\n");


    }
    return 0;
}