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来保存串,又想在函数内释放,并且保证有效,那是没办法做到的了~~~