函数结束会自动释放未释放的动态内存吗?

ZhnagJ1an 2018-10-29 11:09:51
如果函数申请了一块内存,而最后没有free掉,那么编译器会自动将这块内存free吗? 比如某版本《数据结构》书中,线性表的类型如下: typedef struct{ int *elem; int length; ..... }Sqlist; 建立线性表操作 void CreatedSqlist(Sqlist*L){ L->elem=(int*)malloc(sizeof(int)*length); ............. } 调用这个函数后,L->elem还会指向函数中分配的内存吗? 我自己用XCODE实验,结果是分配的内存被释放了了。 是不是编译器对于函数结束没有free的内存,会自动free,所以这种建立线性表方式是不行的。 求教!
...全文
763 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
flychildc 2018-11-05
  • 打赏
  • 举报
回复
但是那块malloc的内存肯定是没有释放的,而L又被释放了,所以你在想free掉malloc的内存就没法操作了,这时候就会造成内存泄漏了。
flychildc 2018-11-05
  • 打赏
  • 举报
回复
malloc的内存如果不手动free,函数退出后肯定是不会释放的,除非程序退出了,系统会把内存全部回收。你测试的L->elem在函数推出后没有指向malloc的内存是因为L是形参,局部变量,在函数推出后就释放了。
云山大侠 2018-11-05
  • 打赏
  • 举报
回复
函数执行结束——退栈。退栈:所属栈区所有数据都会被清除。
其它内存:
1.栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。
2.堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
3.自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。
4.全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。
5.常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改。
真相重于对错 2018-10-29
  • 打赏
  • 举报
回复
因为你传给那个函数的参数是指针,函数返回后,指针指向的地址还是传进来之前的
ZhnagJ1an 2018-10-29
  • 打赏
  • 举报
回复
引用 1 楼 自信男孩的回复:
函数退出不等于动态内存自动被释放,若程序退出了,那么它所申请的空间才会被释放。
可是我调用Createdsqlist()之后,L->elem并没有指向我所分配的内存啊?
自信男孩 2018-10-29
  • 打赏
  • 举报
回复
函数退出不等于动态内存自动被释放,若程序退出了,那么它所申请的空间才会被释放。
失散糖 2018-10-29
  • 打赏
  • 举报
回复
其实这玩艺也有例外,通常动态申请是发生在堆上的。但是如果内存是在栈上动态申请的,比如标准库函数alloca,就不允许free,因为没有对应的释放函数,它申请的动态内存会在调用者返回之后自动释放。
只此冒泡君 2018-10-29
  • 打赏
  • 举报
回复
程序退出动态内存 会释放。 函数退出不会释放动态内存。
英雄@末路 2018-10-29
  • 打赏
  • 举报
回复
不会,自己malloc的,自己free,不释放就会泄漏
  • 打赏
  • 举报
回复
所有内存,在函数结束后不会被释放的
自信男孩 2018-10-29
  • 打赏
  • 举报
回复
引用 2 楼 ZhnagJ1an 的回复:
[quote=引用 1 楼 自信男孩的回复:]函数退出不等于动态内存自动被释放,若程序退出了,那么它所申请的空间才会被释放。

可是我调用Createdsqlist()之后,L->elem并没有指向我所分配的内存啊?[/quote]
代码太少,看不出来你的逻辑是否跟动态内存有关
失散糖 2018-10-29
  • 打赏
  • 举报
回复
是不是忘记传递length的值了,malloc参数里用到的length貌似只是结构体的成员,没看到同名的变量

69,381

社区成员

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

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