问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言用完申请来的内存怎么释放

发布网友 发布时间:2022-04-29 11:33

我来回答

2个回答

热心网友 时间:2022-06-27 00:18

用malloc在堆上分配内存必须有显式的free来释放,释放之后返回的指针一定是个迷失指针,所以在函数内释放是不可能的。

像这样需要一块缓冲区的情况是经常有的,我本人采用的变通方式大概有两种:

1、函数参数中直接传入一块足够大的缓冲区指针,用完由调用方自己释放。微软的API函数就经常采用这种方式,经常需要我们传入一个缓冲区指针。这种方式好处是并不一定要在堆上分配内存,可以传入像数组名等其它缓冲区指针,更灵活。

2、另一种方式采用入口函数和析构函数分开,像fopen你可能用过,它为什么最后还必须用fclose关闭?实际上就是它内部申请了堆上内存,必须释放。你也可以将你的函数类似的方式分成两部分。好处是函数的移植性更强。

不过针对你的这种函数,需要的内存实际上微乎其微,完全可以用数组的方式分配一个足够大的缓冲区代替堆分配,你这种分配本身是更浪费资源的,得不偿失。

不懂得还可以问我。

热心网友 时间:2022-06-27 00:18

不知道strDest是干嘛的,看代码是源字符串,可是变量名~~~~

既然你要传出保存的字符串,又要释放新申请的内存,c里面有几个办法替代:
1、直接将目标串放到strDest中,谁让你取这名字呢
2、定义全局字符数组,将目标串拷贝到全局数组中
3、定义static局部字符数组,将目标串拷贝进去

以上三种都免去了malloc的麻烦,但是各有优缺点。
如果一定要malloc来保存串,又想在函数内释放,并且保证有效,那是没办法做到的了~~~
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
什么时间试排卵纸最佳 排卵第十天排卵试纸弱阳怎么回事 手机app下载课后帮 课后帮点击了家长怎么改成学生的 课后帮绑定学生后还能绑定家长吗 课后帮怎么注册 课后帮注册教程 癫痫急救的正确方法 癫痫持续状态的抢救要点 小儿癫痫发作的急救措施 癫痫病急救常识有哪些要点 华为荣耀V10连续点击三下缩放屏幕功能怎么弄 设置里没有高级模式 C语言 内存释放的问题 内存释放的时候具体进行了什么操作(C语言) 在C语言进行编程中,为什么要释放旧内存? C语言中如何释放已定义的数组空间? C语言 调用函数完后释放内存吗? c语言释放内存的问题 c语言中free函数释放内存后,该内存的里边的数据还有吗? 看C语言的书中说“释放存储空间”,是什么意思?什么叫做释放,为什么叫... C语言内存释放问题 求解关于C语言的释放内存问题? C语言中是如何释放内存单元的;原理又是什么? 微信如何图片加表情 如何查看手机上已连接的wifi密码? 初中800字半命题作文《站在……》在线等 站在校园的门口 作文 初三的作文帮帮忙 要800字的 作文特殊的站立700字 《站起来,勇往直前》800字作文谁能帮我 给篇800字 题目为 站起来做人 的作文。高2 努比亚z9max精英版怎么查看wifi密码 C语言中再次释放已经释放的空间会造成什么后果? 华为荣耀10青春版,连续点几下屏幕,图标就会变大,不知怎么办? C语言中怎样清空内存动态分配的堆空间 在C语言中,如何释放动态数组里面某一个元素所在的内存? c语言分配内存方式有哪些 开发一个聊天交友软件,需要哪些费用?开发软件大概多少钱?需要服务器一年多少钱?还有其他什么费用? 华为荣耀10如何使用 网络视频会议软件,怎么收费呢,用过的人来说说,谢谢啊 好视通视频会议软件是免费的还是收费的?如果收费是怎样收的? 视频会议软件一般多少钱? 视频聊天软件开发需要多少钱 怎样取消WORD中数字与文字之间的距离(自动调节) word2003关闭自动调整字间距 怎么我的WORD一输字自动就分很开呢?怎么消除? word怎么去掉文字之间自动拉开距离,下一行又不回 word中自动调整文字间距问题 word 不自动调整间距 给高考好友200字的一封信 闲鱼东西发出去买家又申请退款怎么办 给高考失利的同学一封信400字作文