【问题标题】:Segmentation Fault, pointer issue?分段错误,指针问题?
【发布时间】:2014-03-03 16:35:11
【问题描述】:

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

我认为这是声明指针的方式,使用 (*) 取消引用它是如何为其分配值。我错了吗?

【问题讨论】:

  • 在通话之前确保一切正常。
  • 你是怎么调用这个函数的?向我们展示一个简短的完整示例

标签: c pointers segmentation-fault


【解决方案1】:

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

【讨论】:

  • 谢谢!我担心这是 foo 代码的问题,但事实证明这是我声明变量的方式。您的第二个解决方案效果很好。
【解决方案2】:

这将导致段错误,因为您正在取消引用尚未初始化的指针。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 2020-07-04
    • 2023-04-04
    • 2016-01-02
    • 1970-01-01
    • 2013-09-18
    • 2016-02-24
    相关资源
    最近更新 更多