LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1358|回复: 4

新手问题(c语言内存分配)

[复制链接]
发表于 2006-5-23 20:41:41 | 显示全部楼层 |阅读模式
当使用malloc分配内存以后,如果不释放会有什么后果!  如果不分配内存,能否通过指针的偏移量来设置其他内存值,分配与不分配修改内存到底有什么区别!

我看了一些c语言程式,有的直接在函数里面使用malloc分配内存,但是为什么到最后并没有释放!


各位大哥别见笑!  小弟刚开始c语言编程不久!
发表于 2006-5-23 21:28:07 | 显示全部楼层
Post by aishen944
当使用malloc分配内存以后,如果不释放会有什么后果!   

如果不释放, 这块内存就永远保持被占用状态,即使你的程序已经退出了;也就是说,这块内存已经不被使用了,但谁也用不了它了,操作系统也无能为力;如果总是分配内存,但从来不释放,最终内存将被耗尽。术语叫内存泄漏(memory leak)。
Post by aishen944
如果不分配内存,能否通过指针的偏移量来设置其他内存值,分配与不分配修改内存到底有什么区别!

这在有的操作系统下是可以的,比如DOS; 但现在绝大多数的操作系统都不允许,因为你可以访问任意的内存地址,不安全;

Post by aishen944
我看了一些c语言程式,有的直接在函数里面使用malloc分配内存,但是为什么到最后并没有释放!

可能你看到的只是程序的片断,作者只是想介绍部分代码,例如介绍算法的代码;总之malloc(), free() 必须成对出现;
----------
不当,不全之处,请兄弟们指正!
回复 支持 反对

使用道具 举报

发表于 2006-5-23 21:59:43 | 显示全部楼层
即使不free,在程序退出后这些内存也会返回给系统继续使用的,如果系统连这个都不能解决,那也太烂了
回复 支持 反对

使用道具 举报

发表于 2006-5-23 22:44:57 | 显示全部楼层
Post by Arthur.Echo
即使不free,在程序退出后这些内存也会返回给系统继续使用的,如果系统连这个都不能解决,那也太烂了

谢谢指正:-)
在linux 系统下,在程序的结尾可以不free,系统会收回程序的所有空间;所以编程时只要注意程序中多次malloc/free的地方;
在windows下是什么策略?我不知道,知道的朋友讲讲吧。。。
但是在某些系统下,比如VxWorks,没有用户空间的概念,所以有malloc(),就要有free();
----------------
为了移植性,malloc()/free()还是成对出现比较好。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-24 09:28:52 | 显示全部楼层
谢谢各位大哥的指正!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表