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关闭?实际上就是它内部申请了堆上内存,必须释放。你也可以将你的函数类似的方式分成两部分。好处是函数的移植性更强。 不过针对你的这种函数,需要的内存实际上微乎其微,完全可以用数组的方式分配一个足够大的缓冲区代替堆分配,你这种分配本身是更浪费资源的,得不偿失。
  • 相关阅读:
    使用Intent传递类对象
    C#中关于类的序列化
    Android 中使用内存监测工具Heap,及内存分析工具 MAT
    Android Framework 记录之一
    Android 2.3发短信详细流程
    AIDL原理解析
    eclipse 快捷键
    什么时候加上android.intent.category.DEFAULT和LAUNCHER
    Monkey测试简介
    Phone状态的监听机制
  • 原文地址:https://www.cnblogs.com/adodo1/p/4328027.html
Copyright © 2011-2022 走看看