zoukankan      html  css  js  c++  java
  • C语言用完申请来的内存怎么释放

    纠结的C char *strmid(char *strDest, int startpos, int strScrlen) { int strDestlen = (int)strlen(strDest); char *buf = (char *)malloc( strDestlen * sizeof(char)); memset(buf, 0, strDestlen); memcpy(buf, strDest + startpos, strScrlen); char *ret = buf; //free(buf); return ret; } 我这里一释放.返回就不正常.但又不能不释放..怎么弄呢.我想在函数内就给他释放掉   用malloc在堆上分配内存必须有显式的free来释放,释放之后返回的指针一定是个迷失指针,所以在函数内释放是不可能的。 像这样需要一块缓冲区的情况是经常有的,我本人采用的变通方式大概有两种: 1、函数参数中直接传入一块足够大的缓冲区指针,用完由调用方自己释放。微软的API函数就经常采用这种方式,经常需要我们传入一个缓冲区指针。这种方式好处是并不一定要在堆上分配内存,可以传入像数组名等其它缓冲区指针,更灵活。 2、另一种方式采用入口函数和析构函数分开,像fopen你可能用过,它为什么最后还必须用fclose关闭?实际上就是它内部申请了堆上内存,必须释放。你也可以将你的函数类似的方式分成两部分。好处是函数的移植性更强。 不过针对你的这种函数,需要的内存实际上微乎其微,完全可以用数组的方式分配一个足够大的缓冲区代替堆分配,你这种分配本身是更浪费资源的,得不偿失。
  • 相关阅读:
    Java入门系列-10-数组
    Java入门系列-09-循环结构
    Java入门系列-08-选择结构
    Java入门系列-07-从控制台中接收输入
    Java入门系列-06-运算符
    05-数据类型和类型转换
    004 java中的变量
    Filter过滤器实现同一地址手机和电脑页面不同
    Java 8 Lambda表达式10个示例【存】
    Centos7+Apache2.4+php5.6+mysql5.5搭建Lamp环境——为了wordPress
  • 原文地址:https://www.cnblogs.com/adodo1/p/4327304.html
Copyright © 2011-2022 走看看