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

[复制链接]
2878|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 | 显示全部楼层
两个都有同样的问题,指针指向一个已经被释放的空间,毫无意义。
 楼主| lzh8430 发表于 2012-9-18 18:06 | 显示全部楼层
2# ayb_ice

那为什么指向结构体的输出值没有被改变,而字符串就是乱码呢?是不是内存释放后有的值被更改的原因啊?
 楼主| lzh8430 发表于 2012-9-18 18:07 | 显示全部楼层
3# zhm8508

那这个函数退出 应该是释放指针了?那原来内存的值应该还是存在的啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

81

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部