亦楠_把一件事做好 2016-05-23 01:02 采纳率: 33.3%
浏览 1370
已采纳

C语言中存储空间分配问题

看书上说声明的变量只是在函数存在的时间有效,函数返回时就会被释放。
然后我就试了一下,代码如下:

#include<stdio.h>
int f(int **iptr)
{
 int a=10;
 *iptr=&a;
 return 0;
}
int main()
{
int **jptr;
f(jptr);
printf("%i\n",**jptr);
}

按理说不应该是f函数结束后变量a就会被释放,此时*iptr应该是一个悬空指针啊,为什么我编译运行程序的时候
还是可以输出a的值为10,谢谢啦,这里不是很理解。

  • 写回答

5条回答 默认 最新

  • 小灸舞 2016-05-23 08:04
    关注

    释放并不代表清空该内存。
    只是将此内存归还给操作系统。
    指向的内存标记为*可用*,操作系统掌控,内容没有意义.不会主动变化(清0).直到再次分配后可能又会用到这部分.
    (可能也和内存分配回收策略有关,出于效率考虑)

    楼主这样的做法属于未定义的行为,如果你访问的区域已经重新被别的变量使用,那么可能导致程序崩溃

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型