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
该x对象并从返回时超出范围retPointer(),和非关联化的指针对象,其有效时间是未定义行为.
有未定义行为的程序意味着任何事情都可能发生,包括碰撞,表现得好像什么都没有发生(如*retPointer()恢复正常值如10),或格式化您的硬盘驱动器.
虽然最后一个选项不太可能,但您绝对不希望在程序中有未定义的行为.不要使用自动存储返回指向本地对象的指针或引用.