2014-03-03 26 views
2

我对C编程非常陌生,指针是我遇到很多麻烦的东西。我正在尝试编写一个程序,它以2个指针作为参数,将第一个值添加到第二个值,然后返回第一个值。我写的是这样的:分割错误,指针问题?

int foo(int *g, int *h) 
{ 
    int a; 
    a = *g; 
    *h += a; 
    return a; 
} 

但是,我正在使用在线编译器得到分段错误错误。我读到这些是由无名指针造成的,但我不确定错误在哪里。有人可以帮忙吗?

编辑: 我调用这个函数是这样的:

main() 
{ 
    int* x; 
    *x = 3; 
    int* y; 
    *y = 4; 
    int z = foo(x, y); 
    printf("%d", z); 
} 

我认为这是声明指针的方式,而且使用(*)取消对它的引用是如何给它赋值。我错了吗?

+0

确保在通话之前一切正常。 –

+3

你是怎么调用这个函数的?向我们展示一个简短的完整示例 – halex

回答

3

main你必须分配空间xy才能使用它。如果xy未分配空格,则它们指向任意的内存位置。如果它们在您的程序段之外,则会出现分段错误。

main() 
{ 
    int* x=malloc(sizeof(int)); 
    *x = 3; 
    int* y=malloc(sizeof(int)); 
    *y = 4; 
    int z = fun(x, y); 
    printf("%d", z); 
} 

或者这样:

main() 
{ 
    int x=3,y=4; 
    int z = fun(&x, &y); 
    printf("%d", z); 
} 
+0

谢谢!我担心这是foo代码的一个问题,但事实证明,事实上,我是如何声明变量的。你的第二个解决方案完美运作 –

0

这将导致一个段错误,因为你解引用尚未初始化的指针。

int *x; // declares pointer X 
*x = 3; // seg fault here because x contains garbage and points certainly to 
      // invalid memory