Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 分段错误,指针问题?_C_Pointers_Segmentation Fault - Fatal编程技术网

C 分段错误,指针问题?

C 分段错误,指针问题?,c,pointers,segmentation-fault,C,Pointers,Segmentation Fault,我对C代码非常陌生,指针是我遇到很多麻烦的东西。我正试图编写一个程序,将两个指针作为参数,将第一个指针的值与第二个指针的值相加,然后返回第一个指针的值。我写的是: int foo(int *g, int *h) { int a; a = *g; *h += a; return a; } 然而,我使用在线编译器得到了一个分段错误。我读到这些是由流氓指针引起的,但我不确定错误在哪里。有人能帮忙吗 编辑: 我这样调用这个函数: main() { i

我对C代码非常陌生,指针是我遇到很多麻烦的东西。我正试图编写一个程序,将两个指针作为参数,将第一个指针的值与第二个指针的值相加,然后返回第一个指针的值。我写的是:

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);
}

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

main
中,您必须为
x
y
分配空间才能使用它。如果
x
y
未分配空间,则它们指向任意内存位置。如果它们在您的程序段之外,您将得到一个段错误

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);
}

这将导致segfault,因为您正在解引用尚未初始化的指针

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

在调用之前确保一切正常。您如何调用此函数?给我们一个简短完整的例子谢谢!我担心这是foo代码的一个问题,但事实上,这就是我声明变量的方式。你的第二个解决方案非常有效。