按价值和地址返回

时间:2017-02-27 07:10:52

标签: c++ pointers return-value

#include <iostream>

int Value ()
{
     int x = 90;//creates a variable x
     return x;//returns the value x, into the caller
     //x is destroyed because it is out of scope
}

int * ptr ()
{
     int x = 7;//creates variable x
     return &x;//returns a pointer to x
     //x gets destroyed because it is out of scope
}

内部主要功能

      int y = Value ();// y = 7

      int *py = ptr ();
      /* *py = 7, not Undefined Behaviour?? */

我创建了这段代码,在调试程序时,在我的监视窗口中我* py = 7。 难道我不会得到未定义的行为,并且程序崩溃,因为py指向现在有垃圾的地址(ptr(中的x)超出范围)

3 个答案:

答案 0 :(得分:1)

函数ptr返回一个值,即局部变量x的地址。当您结束功能时,内存模型仅将此地址(&amp; x)标记为可写,但不会删除内存中的实际值。 因此,当你查看内存地址py的实际值时,你会看到值7但是当另一个函数要求一些内存时它可以被改变。

答案 1 :(得分:1)

  

我不应该得到未定义的行为

是。这就是你得到的。

  

不应该......程序崩溃

没有。该标准没有定义程序必须崩溃。相反,行为是未定义的。

答案 2 :(得分:0)

它变成了dangling pointer。如果使用会导致问题。