当前位置: 代码迷 >> C++ >> 回到栈内存指针,照理说内容应该清空,返回了之后为啥还有
  详细解决方案

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

热度:6983   发布时间:2013-02-26 00:00:00.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。
  相关解决方案