c - 段错误、指针问题?

标签 c pointers segmentation-fault

我对 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中,您必须先为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);
}

关于c - 段错误、指针问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22152126/

相关文章:

c - 使用函数指针和静态变量时是否需要读锁?

c++ - 将派生类的地址分配给基类指针

返回语句之前/期间的 C 段错误

C:段错误 11 strcpy 指针数组

c - 如何调试被覆盖的指针?

c - 如果全局变量被中断修改,是否真的需要 volatile 修饰符?

c++ - 如何将char转换成它的ascii二进制码

c++ - wchar_t 数据是否需要字节序转换?

c - tcc 中的空指针检测

pointers - 如果我将成员函数指针放在指针实例范围之外,是否有任何问题