下面是一个简单的程序:#include <iostream>
class Test
{ public :
int getInt(){
int tmp = 1;
return tmp;
}
char* getStr(){
char tmp[] = {'a','b','c'};
return tmp;
}
};
int main(void){
Test myTest;
std::cout<<myTest.getInt()<<std::endl;
int tmp[] = {1,2,3};
std::cout<<*tmp<<std::endl;
std::cout<<*(myTest.getStr())<<std::endl;
return 0;
}//记得很多次面试的时候,被别人问及那个getStr()函数(方法),我总是回答它的返回值是不可预料的,因为当调用返回以后,堆栈已经关闭了。面试的人也觉得对。但是,上面那个简单的程序我却发现能打印出来预期的结果——难道我以前的理解错了?
如果没错,这个代码该怎么写才能体现那种堆栈关闭以后返回值不可预料的情况?
请大家指点,谢谢先。

解决方案 »

  1.   

    I agree with mfc168. He is right.
    不是每次都能返回不可预料的结果
    因为你的返回值是一个地址,而当函数执行结束的时候,因为堆栈已经关闭,该地址有可能已经改变(返回错误值),有可能没有改变(正确),而地址是否改变,取决于你的其他操作是否有分配指针或内存操作占用了该地址空间
      

  2.   

    你用一个指针指向返回值,然后Sleep一下再out该指针。不过也不一定可以。只要那个函数中使用的内存还没有被分配作其它用途的话可能还是同样的结果。