C zlib异常在记录区

C zlib异常在记录区,c,exception,zlib,C,Exception,Zlib,当使用块大小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 ch

当使用块大小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++;

}

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


我将代码改为按地址传递bflush,它成功了。

这不是zlib代码。在中,不是函数。

崩溃可能不在zlib代码中,而是在您的中。当崩溃发生时,您应该查看函数调用堆栈,看看它发生在代码中的什么地方。请发布该函数,可能还有调用堆栈。不,它不在zlib代码中,因为这不是zlib代码。正确。我将一个宏更改为C代码,并亲自介绍了这个bug。zlib代码中没有bug。zlib代码在windows8和IBM的z/OS大型机下运行得非常快。这是一个伟大的图书馆为任何人考虑压缩IMHO。