int  inflate_read(char  *source,int  len,char  **dest,int  gzip) 

int  ret; 
unsigned  have; 
z_stream  strm; 
unsigned  char  out[2048]; 
int  totalsize  =  0;  /*  allocate  inflate  state  */ 
strm.zalloc  =  Z_NULL; 
strm.zfree  =  Z_NULL; 
strm.opaque  =  Z_NULL; 
strm.avail_in  =  0; 
strm.next_in  =  Z_NULL;  if(gzip) 
ret  =  inflateInit2(&strm,  47); 
else 
ret  =  inflateInit(&strm);  if  (ret  !=  Z_OK) 
return  ret;  strm.avail_in  =  len; 
strm.next_in  =  (Bytef *)source;  /*  run  inflate()  on  input  until  output  buffer  not  full  */ 
do  { 
strm.avail_out  =  2048; 
strm.next_out  =  out; 
ret  =  inflate(&strm,  Z_NO_FLUSH); 
assert(ret  !=  Z_STREAM_ERROR);    /*  state  not  clobbered  */ 
switch  (ret) 

case  Z_NEED_DICT: 
ret  =  Z_DATA_ERROR;          /*  and  fall  through  */ 
case  Z_DATA_ERROR: 
case  Z_MEM_ERROR: 
inflateEnd(&strm); 
   return  ret; 

have  =  2048  -  strm.avail_out; 
totalsize  +=  have; 
*dest  =  (char *)realloc(*dest, totalsize); 
memcpy(*dest  +  totalsize  -  have, out, have); 
}  while  (strm.avail_out  ==  0);        // free(*dest); /*  clean  up  and  return  */ 
(void)inflateEnd(&strm); 
   return  ret  ==  Z_STREAM_END  ?  Z_OK  :  Z_DATA_ERROR; 
} 我现在用这种方法,发现dest不停的分配之后,我不知道 
 1.怎么回收开辟的空间
 因为这个函数需要不停的调用,请大家帮忙