繁体   English   中英

在调用函数中取消引用指针时出现分段错误

[英]Segmentation fault while dereferencing the pointer in the calling function

运行以下代码时,出现分段错误错误,并且无法纠正错误。

    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应该指向值“ 2”。 但是相反,它给出了一个错误。

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

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

  c
  |
+---+---+
| 2 |   |
+---+---+
      |
     ++c
void test(int *c)
{
   c++;
   *c = 10;

*c = 10是未定义的行为,因为您正在写入不属于您的内存。

在功能测试中,“ c”的地址为“ a”,例如1000。现在您将该地址递增至1004,现在该内存地址不是由您分配的。

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

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

为了获得更好的主意,只要在释放内存()并访问变量时考虑一下空闲(),您可能仍然会得到该值,但这是未定义的行为,任何事情都可能发生。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM