当超出范围时,堆栈上的局部变量不会被删除

Sou*_*Roy 0 c++ undefined-behavior

#include <iostream>

int* retPointer()
{
    int x=10; //same as auto int x =10;
    return &x;
}

int main(int argc, char **argv)
{
    std::cout<<"x="<<*retPointer()<<std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我返回一个指向要堆叠的局部变量的指针.当我在man()中打印此指针指向的值时,我应该得到一个seg-fault.当我从函数retPointer()返回时,变量x应该超出范围.因此,当尝试访问main()中的值时,我是否应该得到分段错误?我在这里错过了什么吗?

输出= x = 10

And*_*owl 6

x对象从返回时超出范围retPointer(),和非关联化的指针对象,其有效时间是未定义行为.

有未定义行为的程序意味着任何事情都可能发生,包括碰撞,表现得好像什么都没有发生(如*retPointer()恢复正常值如10),或格式化您的硬盘驱动器.

虽然最后一个选项不太可能,但您绝对希望在程序中有未定义的行为.不要使用自动存储返回指向本地对象的指针或引用.