#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;
}
在上面的示例中,我返回了一个指向堆栈的局部变量的指针。当我在man()中打印这个指针指向的值时,我应该得到一个seg-fault。当我从函数retPointer()返回时,变量x应该超出范围。所以当尝试访问main()中的值时,我是否应该得到分段错误?我在这里错过了什么吗?超出范围时堆栈上的局部变量未被删除
输出是= X = 10
欢迎使用未定义的行为。 – WhozCraig 2013-02-20 15:46:09
您确定这可行吗?那么,堆栈帧会丢失,但在函数终止后内存仍然存在,但实际上它不应该发生...... – 2013-02-20 15:47:46
标准说哪里应该得到seg-fault? – 2013-02-20 15:52:39