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.怎么回收开辟的空间
因为这个函数需要不停的调用,请大家帮忙
{
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.怎么回收开辟的空间
因为这个函数需要不停的调用,请大家帮忙
解决方案 »
- 波段像素读入缓冲区后,要在单文档工程中把图绘制出来 在线等待
- 在MFC里面,怎样添加WM_CTLCOLORSCROLLBAR消息。
- 如何将新开线程中接收到的数据传回主线程?
- vertor<string> a(6,"dddd");有10个警告,请各位大侠帮小弟解决
- 完了,CListCtrl不能编辑除第一列外的其他列的内容呀??
- 请问怎样才能在一个对话框中添加属性表和dbgrid控件?
- 为什么我用一幅图片做为对话框的背景图,在对话框上添加的按钮控件在窗口拖动时消失不见了!
- 简单问题,关于数值范围??一定给分
- MFC 优点 缺点
- "\n"的问题?
- 动态创建控件 事件捕获问题
- 查询数据库中符合条件的记录,在列表控件中全部显示
中间犯了个错误,呵呵。
char **p
free(*p);
free(p);