求助:Zlib uncompress 异常!

lkenan 2017-01-16 06:29:10
小弟最近用到压缩解压,选择使用zlib库,解压缩时,总是在 uncompress 处发生异常:0xC0000005: 读取位置 0xcdcdcdcd 时发生访问冲突。。。纠结了3天,无果,特来求救。
代码:(暂不考虑在文件中保存大小,用最简单的方法,测 uncompress)

//定义接收缓冲区
const int MAX_BUFFER_SIZE = 1024*1024*4;
unsigned char DATA_BUFFER[MAX_BUFFER_SIZE];
//函数
{
FILE *f1 = fopen(cFileName,"r");
if (f1)
{
int Len; //解压文件长度
fseek(f1,0,2);
Len = ftell(f1);
fseek(f1,0,0);
char *data = new char[Len ];
fread(data,1,Len ,f1); //读取文件内容到 data
fclose(f1);

uLong dst_len = MAX_BUFFER_SIZE;
Bytef * dst = (Bytef*)DATA_BUFFER; //接收解压文件
uncompress(dst,&dst_len,(Bytef *)data,(uLong)Len ); //解压
}
delete [] data;
}
注:使用几kb的小文件进行压缩、解压。总是在 uncompress 处异常

请各位路过的兄弟们,帮一把。。。多谢!分不多,请笑纳
...全文
1765 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
bitera 2020-04-22
  • 打赏
  • 举报
回复
1.2.11版本这个错误的解决方案 https://blog.csdn.net/ankang654321/article/details/83187289 编译前只需要在工程 预处理器,去掉 ASMINF 定义, VS2010 Release模式编译亲测有效。
share7we 2018-07-10
  • 打赏
  • 举报
回复
困扰了我一天问题,解决了,感谢#7
幽行 2017-11-14
  • 打赏
  • 举报
回复
引用 10 楼 ananluowei 的回复:
1.2.11我也碰到这个问题,inflate_fast崩溃 网上搜了一下,汇编版本的有坑 解决方法是编译zlib的时候用releasewithoutasm 这样生成的库是不崩溃的
使用release版本就没有问题了。 另外在网上看到另一个注释《inffast.c》这个文件中的预定义值;ASMINF,会出现另一个问题。重复定义的。
大尾巴猫 2017-10-01
  • 打赏
  • 举报
回复
1.2.11我也碰到这个问题,inflate_fast崩溃 网上搜了一下,汇编版本的有坑 解决方法是编译zlib的时候用releasewithoutasm 这样生成的库是不崩溃的
污点好人 2017-05-15
  • 打赏
  • 举报
回复
引用 8 楼 uo7801 的回复:
[quote=引用 7 楼 JetLuo 的回复:] 我的问题解决。用的1.2.11出现问题,换成1.2.3就正常了。
跪谢,同样的问题,已解决[/quote] 我用1.2.11也有这个问题,当uncompress 的dest缓冲区长度大于256就会出现,找了个旧版1.2.7的没有这个问题。
dragon11021312 2017-03-30
  • 打赏
  • 举报
回复
引用 7 楼 JetLuo 的回复:
我的问题解决。用的1.2.11出现问题,换成1.2.3就正常了。
跪谢,同样的问题,已解决
JetLuo 2017-03-03
  • 打赏
  • 举报
回复
我的问题解决。用的1.2.11出现问题,换成1.2.3就正常了。
JetLuo 2017-03-01
  • 打赏
  • 举报
回复
compress后直接uncompress,也出现同样的问题?
UESTC少尉 2017-02-23
  • 打赏
  • 举报
回复
我也遇到同样的问题,不知道楼主解决没有呢
赵4老师 2017-01-17
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止
ipqtjmqj 2017-01-17
  • 打赏
  • 举报
回复
fopen打开用"rb"
lunat 2017-01-17
  • 打赏
  • 举报
回复
compress/uncompress是内存压缩的,不带文件头,你可以使用zip.h和unzip.h里面的函数,参考: http://blog.csdn.net/okadler0518/article/details/6131327
lkenan 2017-01-16
  • 打赏
  • 举报
回复
补充: 在调用 compress 下面,再调用 uncompress,是没问题的。就是读取文件,解压出错! 不是 uncompress 返回错误,是直接发生异常! 压缩时测试代码如下: //压缩数据z_compress if(compress(pOut, &uOut, pIn, uIn) != Z_OK) { printf("compress failed!\n"); return -1; } if(uncompress(pIn, &uIn, pOut, uOut) != Z_OK) { printf("compress failed!\n"); return -1; } 唉,折腾的,我都想先拿压缩文件,再压缩一次,然后再连续解压两次啦!(中间调整缓冲区大小)
资源下载链接为: https://pan.quark.cn/s/9e7ef05254f8 在 IT 领域,Web 服务是一种借助网络实现通信的软件系统,通常以 XML 作为数据交换格式。WSDL 是一种用于描述 Web 服务的标准语言,它明确了服务的位置、接口以及调用方式等关键信息。本文将深入探讨如何依据 WSDL 地址调用 WebService 接口,并介绍相关工具的应用。 首先,WSDL 文件本质上是一个 XML 文档,详细规定了服务提供方与消费方的交互细节,涵盖服务地址、消息格式、操作以及服务契约等内容。借助 WSDL,开发者能够清楚知晓如何与 Web 服务进行交互,包括输入输出消息的具体结构。 其次,SOAP 是 Web 服务常用的传输协议,它在 HTTP、SMTP 等基础协议之上对 XML 消息进行封装。WSDL 中定义的服务操作一般对应于 SOAP 消息中的方法。 要调用 Web 服务,开发者通常需要一个客户端代理类,该类封装了与服务交互的所有逻辑。当下多数开发环境都提供了从 WSDL 自动生成代理类的工具。比如在 Java 环境中,可利用 Apache CXF、Axis2 等库,或者借助 Maven 的 wsimport 插件来实现。在 .NET 环境下,Visual Studio 能够直接从 WSDL 生成服务引用。 生成代理类后,调用 Web 服务就如同调用本地方法一样便捷。以 Java 为例,创建代理类实例后,即可调用其方法并传递相应参数。在 .NET 中,创建服务代理对象后,也能通过它来调用服务方法。 文中提到的“源码 工具”标签,可能涉及一些协助开发者处理 WSDL 的工具。例如,SoapUI 是一款广受欢迎的测试工具,可用于测试 Web 服务,包括基于 WSDL 创建测试用例。此外,wsdl2java 和 wsdl2dotnet 分别是 Java

33,322

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧