返回指向局部变量的指针

时间:2016-12-06 08:51:12

标签: c++ function pointers

当函数返回指向局部变量的指针时会发生什么?

例如

int* foo()
{
    int local;
    int* ptr = &local;
    return ptr;
}

编译器会发出警告还是会编译并产生意外结果?

2 个答案:

答案 0 :(得分:4)

  

当函数返回指向局部变量的指针时会发生什么?

未定义的行为。任何事情都可能发生。编译器会给你一个警告。

这是g++警告这个错误:

g++ -Wall -std=c++11 -O3 test.cpp -o test
warning: function returns address of local variable [-Wreturn-local-addr]

答案 1 :(得分:2)

已经提出了类似的问题:Stack Overflow, local pointer

C中有些东西留给编译器供应商以他们喜欢的方式实现。这些事物的行为不是由创作者定义的。编译器供应商可以以他们感觉轻松和快速的方式实现这些事情。这属于同一类别。行为未定义,取决于您使用的编译器。

还有一个这样的事情是使用多个预增量(预减量)和/或后增量(减量后)。当相同的代码在不同的编译器上运行时,您可能会得到不同的输出。