鱼C论坛

 找回密码
 立即注册
查看: 1846|回复: 2

[已解决]小白求解leetcode一道题关于动态内存分配malloc

[复制链接]
发表于 2021-9-10 23:23:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

                               
登录/注册后可看大图


                               
登录/注册后可看大图


疑惑力扣官方给的题解里没有释放内存和给相应指针赋NULL,请大佬指教这样会有什么后果,或者应该怎么进行相应操作。




最佳答案
2021-9-11 00:09:30
没有给相应指针赋NULL
这不会有任何问题,只要你保证 free 一段内存空间后,不再操作这段内存空间,就不会有任何问题
像我就是这样,free 后的指针变量是 不赋值 NULL 的,我认为没有必要,因为我写的代码,还没有在这个地方出过问题,我有这自信,^_^

关于释放内存的问题
这个当然要释放了,虽然有一些情况不释放也不会有什么问题,但是有一些情况是一定会出问题
为了养成良好的编程习惯,申请了内存就一定要释放

像一些 替换一个文件中的某些单词,显示当前目录下面的文件,设置当前用户的名字,这类程序你申请了内存不释放也没事,毕竟它运行一下就结束了,程序结束后系统会把程序用到的所有内存都回收,你不释放也没事
但是对于 要连续运行几天 几个月 甚至几年的程序,例如 服务器上的一些程序,控制机械臂的程序,你手机的内核程序,有一些程序必须一刻不停的运行,它们停止工作了,会带来非常严重的后果
这些程序要一直运行,如果只是申请内存,不释放内存,那么迟早有一天,malloc 这样的函数会因为没有内存可用,而返回 NULL
为什么会没有内存可用?因为全让你当前运行的这个程序申请了,注意是 "申请了",不是 "使用了"
因为你当前程序的进程空间中有大量的空间,但是你不用,你就要去申请,系统已经把全部的内存空间都分配给你了,没有内存空间可以分配了
因为 malloc 返回了 NULL,这直接导致你的程序终止,而这个程序终止了会导致非常严重的后果
值得一提的是,现在的 windows 连一个月也撑不了,就因为没有内存可以使用了,而不得不重启系统
16GB 内存,撑不了一个月,还没有打开什么程序,内存就占用 80%,这多亏了那些只申请内存,不释放内存的人们,若不是他们,我现在的系统怎么会一个月就必须重启一次

还有一些情况
在一些环境下,申请了内存,如果没有释放内存,程序就退出了,那么程序结束后会报出一堆错误,错误的数量取决于你有多少块内存没有释放,没有释放的内存越多,报出的错误也越多
比如,我现在的调试环境,如果程序在申请了内存后没有释放就结束了,就会收到一堆错误提示

综上所述,申请了内存就一定要释放,不然你会被使用你程序的人骂死的,像我就非常痛恨那些不释放内存的人,我真想让他们体验一下他们写的程序给别人造成了多大的麻烦


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-11 00:09:30 | 显示全部楼层    本楼为最佳答案   
没有给相应指针赋NULL
这不会有任何问题,只要你保证 free 一段内存空间后,不再操作这段内存空间,就不会有任何问题
像我就是这样,free 后的指针变量是 不赋值 NULL 的,我认为没有必要,因为我写的代码,还没有在这个地方出过问题,我有这自信,^_^

关于释放内存的问题
这个当然要释放了,虽然有一些情况不释放也不会有什么问题,但是有一些情况是一定会出问题
为了养成良好的编程习惯,申请了内存就一定要释放

像一些 替换一个文件中的某些单词,显示当前目录下面的文件,设置当前用户的名字,这类程序你申请了内存不释放也没事,毕竟它运行一下就结束了,程序结束后系统会把程序用到的所有内存都回收,你不释放也没事
但是对于 要连续运行几天 几个月 甚至几年的程序,例如 服务器上的一些程序,控制机械臂的程序,你手机的内核程序,有一些程序必须一刻不停的运行,它们停止工作了,会带来非常严重的后果
这些程序要一直运行,如果只是申请内存,不释放内存,那么迟早有一天,malloc 这样的函数会因为没有内存可用,而返回 NULL
为什么会没有内存可用?因为全让你当前运行的这个程序申请了,注意是 "申请了",不是 "使用了"
因为你当前程序的进程空间中有大量的空间,但是你不用,你就要去申请,系统已经把全部的内存空间都分配给你了,没有内存空间可以分配了
因为 malloc 返回了 NULL,这直接导致你的程序终止,而这个程序终止了会导致非常严重的后果
值得一提的是,现在的 windows 连一个月也撑不了,就因为没有内存可以使用了,而不得不重启系统
16GB 内存,撑不了一个月,还没有打开什么程序,内存就占用 80%,这多亏了那些只申请内存,不释放内存的人们,若不是他们,我现在的系统怎么会一个月就必须重启一次

还有一些情况
在一些环境下,申请了内存,如果没有释放内存,程序就退出了,那么程序结束后会报出一堆错误,错误的数量取决于你有多少块内存没有释放,没有释放的内存越多,报出的错误也越多
比如,我现在的调试环境,如果程序在申请了内存后没有释放就结束了,就会收到一堆错误提示

综上所述,申请了内存就一定要释放,不然你会被使用你程序的人骂死的,像我就非常痛恨那些不释放内存的人,我真想让他们体验一下他们写的程序给别人造成了多大的麻烦


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2021-9-11 07:36:35 | 显示全部楼层
人造人 发表于 2021-9-11 00:09
没有给相应指针赋NULL
这不会有任何问题,只要你保证 free 一段内存空间后,不再操作这段内存空间,就不会 ...

高手,我就好几回忘了释放,印象老深刻了,所以现在申请完紧接着在后面写释放代码,然后再写中间的
NULL是把双刃剑,如果没释放前赋值为null,那就得等程序结束系统回收,祈祷程序结束前内存资源不会枯竭
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 07:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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