请教《高质量**编程指南 》中的一道指针参数传递内存的问题

zhuangmin 2005-04-11 12:14:28
char *GetMemory(void)
{
char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}

请问运行Test函数会有什么样的结果?
答:可能是乱码。
因为GetMemory返回的是指向“栈内存” 的指针,该指针的地址不是 NULL,但其原先的内容已经被清楚,新内容不可知。

请问这个栈内存究竟是啥回事?
...全文
84 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
soapheaven 2005-04-11
  • 打赏
  • 举报
回复
栈内存以释放,str为野指针,指向内存区域可能为乱码
pcboyxhy 2005-04-11
  • 打赏
  • 举报
回复
非static的局部变量保存在栈里
动态分配的在堆里
zhuangmin 2005-04-11
  • 打赏
  • 举报
回复
匪徒的意思是用malloc(sizeof())申請的内存是放在堆里的?
而这个例子里的P是防在栈里的?

请问有这方面较详细的阐述么?
zhousqy 2005-04-11
  • 打赏
  • 举报
回复
动态分配的东西在堆里、局部变量什么的在栈里。
zhuangmin 2005-04-11
  • 打赏
  • 举报
回复
请问楼上星星,这堆里的地址和栈里的地址如何区分?具体定义是啥?
偶没找到类似的书。谢谢*-*
pcboyxhy 2005-04-11
  • 打赏
  • 举报
回复
返回局部数组的地址
当函数退出时
数组销毁
原来的数据不能保证不被修改。
所以结果无法预料


这里的GetMemory(); 实际返回的不是堆里的内存起始地址
而是栈里的地址
栈里的内存在离开变量作用域之后是不可预测的。

zhuangmin 2005-04-11
  • 打赏
  • 举报
回复
那本书讲这个玩意讲的多一点啊,关于动态变量的内存分配啊。
什么堆啊栈 啊。
pcboyxhy的讲解偶已经基本明白了

69,335

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧