MyException - 我的异常网
当前位置:我的异常网» C++ » 回到栈内存指针,照理说内容应该清空,返回了之后为

回到栈内存指针,照理说内容应该清空,返回了之后为啥还有

www.MyException.Cn  网友分享于:2013-02-18  浏览:0次
返回栈内存指针,照理说内容应该清空,返回了之后为啥还有
#include <iostream>
using namespace std;
char *GetString(void)
{
 char p[] = "hello world";
 return p; // 编译器将提出警告
}
void main()
{
char *str = NULL;
str = GetString(); // str 的内容是垃圾
cout<<*str<< endl;
system("pause");
}


今天测试了下发现输出h,*(str+1)输出e
我不理解啊,不是说str的内容是垃圾吗?
是万恶的编译器优化了还是我个人理解深度不够,求各位指教,谢谢!

------解决方案--------------------
内容还没被覆盖

------解决方案--------------------
#include <iostream>
using namespace std;
char *GetString(void)
{
char p[] = "hello world";
return p; // 编译器将提出警告
}

void foo(void)//加个函数进去。
{
char p[] = "edit char";
}

void main()
{
char *str = NULL;
str = GetString(); // str 的内容是垃圾
foo();//加个函数进去。
cout<<*str<< endl;
system("pause");
}


和时间没直接关联,因为栈没给覆盖。vs2008下debug模式,会输出e。但release模式,会优化掉foo()函数,也会显示h。

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有