误写zlib带来的问题

网络通信数据较大,用到了zlib.

最近碰到一个崩溃的问题,追踪后发现zlib的使用有问题。

而后自己写了一段测试代码,确实是使用有问题。


BYTE pCompressData[3] = {0};
DWORD dwAfterCompressSize = 1024;
BYTE* pBitmapData = (BYTE*)malloc(1024*1024);
  int iRet = compress( pCompressData, &dwAfterCompressSize, pBitmapData, 1024*1024);

比较容易让人误解的是,iRet的返回值是Z_BUF_ERROR,让人以为zlib正常运行了。

实际上对于zlib来说,它确实正常运行了,但是它访问了不该访问的内存,造成了不可预知的问题;而后程序崩溃,并且定位不到错误,那也就是顺理成章的事情了。


这件事有两个教训:

作为接口的提供者,尽可能多的作参数的合法性检查;当然在这次崩溃的情况下,不是合法性检查不严谨引起的;

作为借口的调用者,尽可能多的作参数的合法性检查;因为一不小心,会访问到不改访问的内存地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值