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关闭?实际上就是它内部申请了堆上内存,必须释放。你也可以将你的函数类似的方式分成两部分。好处是函数的移植性更强。 不过针对你的这种函数,需要的内存实际上微乎其微,完全可以用数组的方式分配一个足够大的缓冲区代替堆分配,你这种分配本身是更浪费资源的,得不偿失。
posted @ 2012-07-16 18:32  adodo1  Views(323)  Comments(0Edit  收藏  举报