打印

请教各位:关于C语言中调用函数返回指针的困惑(栈内存)

[复制链接]
2346|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lzh8430|  楼主 | 2012-9-18 14:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第一个:
struct student
{
  int number;
float score;
};
struct student *fun2()
{
student stu1;
stu1.number=5489;
stu1.score=45.5;

student *stuptr=&stu1;

return stuptr;
}

第二个:
char *GetMemory(void)
{
char p[20] = "hello world";
char *ptr=p;
return ptr;
}

这两个函数依次返回指向结构和执行数组的指针
我困惑的是第一个能够正常输出,而第二个返回数组的指针就是乱码,
我看了一下,说是第二个的原因是:
因为GetMemory 返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原来的内容已经被清除,新内容不可知。

那么问题就来了,我的理解是第一个也应该是指向“栈内存”的指针,结构体stu1也是在栈内存中开辟的空间啊,函数执行完也应该类似于上边的数组,stu1也应该被自动释放的呀?那它为什么还是输出正确的值呢?而数组是乱码?
请各位指教一下 谢谢了!

相关帖子

沙发
ayb_ice| | 2012-9-18 14:52 | 只看该作者
可以不等于一定可以,

两个都有问题,函数返回时,指定的内存已经无意义了

使用特权

评论回复
板凳
zhm8508| | 2012-9-18 15:28 | 只看该作者
释放!=清除

使用特权

评论回复
地板
amwrdfe| | 2012-9-18 16:23 | 只看该作者
两个都有同样的问题,指针指向一个已经被释放的空间,毫无意义。

使用特权

评论回复
5
lzh8430|  楼主 | 2012-9-18 18:06 | 只看该作者
2# ayb_ice

那为什么指向结构体的输出值没有被改变,而字符串就是乱码呢?是不是内存释放后有的值被更改的原因啊?

使用特权

评论回复
6
lzh8430|  楼主 | 2012-9-18 18:07 | 只看该作者
3# zhm8508

那这个函数退出 应该是释放指针了?那原来内存的值应该还是存在的啊?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

81

帖子

1

粉丝