c - _tr_tally_dist 中的 zlib 异常

标签 c exception zlib

当使用大小为 262144 的 block 时,我从 zlib deflate 收到以下错误。

访问冲突写入位置 0x005AF000。

错误发生在_tr_tally_dist

dist 的值为 26885,last_lit = 35312。

有什么想法吗?

void _tr_tally_dist (s, distance, length, flush)
deflate_state *s;
unsigned int distance;
unsigned int length;
int flush;
{ 
    unsigned char  len = length;
    unsigned short dist = distance;
    flush = (s->last_lit >= s->lit_bufsize - 1);
    **s->d_buf[s->last_lit] = dist;**
    s->l_buf[s->last_lit++] = len;
    dist--;
    s->dyn_ltree[_length_code[len] + LITERALS + 1].Freq++;
    s->dyn_dtree[d_code (dist)].Freq++;

}

最佳答案

我发现了问题。它在 zlib 代码中。刷新的值是按值传递而不是按引用传递,因此它永远不会更新。

我更改了代码以通过地址传递 bflush 并且它起作用了。

关于c - _tr_tally_dist 中的 zlib 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19005392/

相关文章:

c - C 中的逻辑相等

c - 位域如何在 C 中工作?

c - C 中的运行时多态性

python - 扭曲并将异常写入stderr

json - 为什么 ReSTLet 无法注册 JSON 转换器?

c - 文件搜索场景中的 zlib 压缩问题,zlib 中是否有任何锁定/标志机制可以在这些机制之间保持完整性

haskell - 围模板函数找不到Libz.so

c - 如何强制限制大小以防止格式截断?

java - StringIndexOutOfBoundsException while 循环与charat()

ios - Swift 膨胀 [UInt8] 无法使用 miniz lib 缩小