我输入后立即分段错误

时间:2015-02-10 07:54:46

标签: c segmentation-fault user-input

我试图在KARATSUBA MULTIPLICATION上编写一个程序,但是只要我输入第二个数字就会显示出一个分段错误(核心转储)错误。

我还没有将所有案例都包括在程序中(只是两个数字相等的数字)。我很陌生,因此无法使用GDB解决问题。

#include<stdio.h>
#include <math.h>
int pro(int,int);
int digits(int);
int main()
{
   int s,q,r;
   printf("enter the two no.");
   scanf("%d",&s);
   scanf("%d",&q);
   r=pro(s,q);
   printf("the product is %d",r);
    return 0;
 }
int pro(int x,int y)
{
    int dig,a,b,c,d,p1,p2,p3,p;
    dig=digits(x);
    if(dig>1){
    b=x%((int)pow(10,(d/2)));
    a=x/pow(10,(d/2));
    d=y%((int)pow(10,(d/2)));
    c=y/pow(10,(d/2));
     p1=pro(a,c);
     p2=pro(b,d);
     p3=pro(a+b,c+d);
     p=(pow(10,dig)*p1)+(pow(10,dig/2)*(p3-p2-p1))+p2;}

   if(dig==1)
 return (x*y);
}
int digits(int o)
{   int c=0;
    while(o>0){
         o=o/10;
         c++;
    }
    return c;
}

2 个答案:

答案 0 :(得分:2)

int d;

未在函数pro()中初始化并且您正在使用它,使用未确定的值导致未定义的behvaior。

请在使用前将变量初始化为合适的值。

仅供参考pow()的原型

double pow(double x, double y)

但我没有看到正在使用double并且你将int传递给这个API并将返回值存储在int中,因此由于类型不匹配而可能无法获得预期的结果

答案 1 :(得分:2)

这看起来很奇怪

int pro(int x,int y)
{
  ...
  if(dig==1)
    return (x*y);
}

如果dig不是1,则返回堆栈中的任何值。

我建议你用gcc和warn-all compiler-flag(-Wall)编译。