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关闭?实际上就是它内部申请了堆上内存,必须释放。你也可以将你的函数类似的方式分成两部分。好处是函数的移植性更强。 不过针对你的这种函数,需要的内存实际上微乎其微,完全可以用数组的方式分配一个足够大的缓冲区代替堆分配,你这种分配本身是更浪费资源的,得不偿失。
  • 相关阅读:
    nexus-3.2.0-01.zip安装以及如何启动服务
    Windows环境使用Nexus-3.x搭建Maven私服
    Maven中settings.xml的配置项说明
    Maven之setting.xml配置文件详解
    设置MAVEN_OPTS环境变量
    使用Nexus搭建Maven私服
    spark-submit参数配置
    spark遇到的问题(持续更新)
    hikari参数配置
    java 开发遇到的问题
  • 原文地址:https://www.cnblogs.com/adodo1/p/4328027.html
Copyright © 2011-2022 走看看