在解除引用调用函数中的指针时出现分段错误

时间:2018-02-23 06:10:45

标签: c++ pointers segmentation-fault

当我运行以下代码时,我得到分段错误错误,我无法纠正我的错误。

    void test(int *c)
{
    c++;
    *c = 10;
    cout<<*c<<endl;
}

int main()
{
    int a =2;
    int *b = &a;
    test(b);
    cout<<*b;
    return 0;
}

我认为b应该指向价值&#39; 2&#39;。但相反,它会出错。

4 个答案:

答案 0 :(得分:2)

使用c++增加指针的值而不是整数的值。它将指向一个未由您分配的新位置,它将引发分段错误错误。新位置可能由其他程序或系统使用.....

答案 1 :(得分:2)

你在test中移动指针的是什么?您将其移到变量a的内存后面并达到未定义的行为。

  c
  |
+---+---+
| 2 |   |
+---+---+
      |
     ++c

答案 2 :(得分:2)

  const biggest = movers.reduce((max, mover) => max.MoveCount > mover.MoveCount ? max : mover);

void test(int *c) { c++; *c = 10; 是未定义的行为,因为您正在写入不属于您的内存。

答案 3 :(得分:0)

在功能测试中,'c'的地址为'a',表示1000.现在你增加这个地址,说它变为1004,现在这个内存地址没有被你分配。

当您尝试访问未分配的内存时,会发生分段错误。

现在当你尝试打印* c时,它可能会打印10但它是未定义的行为,有时甚至会使PC崩溃。

为了获得更好的想法,只需考虑free()当你释放()内存然后访问一个你可能仍然得到值的变量但它是未定义的行为,任何事情都可能发生。