首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于内存储器分配的一点疑问

2012-08-11 
关于内存分配的一点疑问#include cstring#include iostreamusing namespace stdchar* Func1()char*

关于内存分配的一点疑问
#include <cstring>
#include <iostream>

using namespace std;

char* Func1();
char* Func2();

void main(void)
{
char *p = NULL;
//p = Func1();
  p = Func2();
cout<<p<<endl;
getch();
}

char* Func1()
{
char *str = "Hello";
return str;
}

char* Func2()
{
char str[] = "Hello";
return str;
}
Func2()里的str是在栈上分配的内存,调用结束后str占用的内存就被释放了,所以调用Func2()输出乱码,那么Func1()不是
同样的道理吗,为什么可以输出Hello?

[解决办法]
char *str = "Hello";//str会被设置为常量,这个数据区里面很少变动,所以你获得地址后应该能正常输出的。
[解决办法]

探讨

自己解答下大伙帮我看下对不:
在Func2()里的str是数组型变量,它是在栈上分配的内存,调用结束后str占用的内存就被释放了,所以调用Func2()输出乱码
但是Func1()里str是指针型变量,"Hello"是存放在文字常量区的,是将该文字常量区的地址赋给str,调用结束后,该文字常量区的地址还是存在的,所以可以正常输出。
不知道,我的这种解释对吗?但我还是觉得怪怪的。。。。

[解决办法]
建议读读这篇文章:
关于函数返回值的几种情况
[解决办法]
探讨

哥,你的解释很好,我本来是想结贴给分了
但是我想问下为什么Func1里的"Hello"是存放在常量区
而Func2里的"Hello"是存放在栈里?

热点排行