当使用大小为 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/