0

使用 262144 的块大小时,我从 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++;

}
4

2 回答 2

0

那不是 zlib 代码。在zlib 中,_tr_tally_dist是一个宏,而不是一个函数。

于 2013-09-26T01:28:45.287 回答
0

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

我更改了代码以通过地址传递 bflush 并且它有效。

于 2013-09-25T21:18:37.110 回答