【发布时间】:2015-08-13 14:42:43
【问题描述】:
这是我用来解压缓冲区的函数。
string unzipBuffer(size_t decryptedLength, unsigned char * decryptedData)
{
z_stream stream;
stream.zalloc = Z_NULL;
stream.zfree = Z_NULL;
stream.avail_in = decryptedLength;
stream.next_in = (Bytef *)decryptedData;
stream.total_out = 0;
stream.avail_out = 0;
size_t dataLength = decryptedLength* 1.5;
char c[dataLength];
if (inflateInit2(&stream, 47) == Z_OK)
{
int status = Z_OK;
while (status == Z_OK)
{
if (stream.total_out >= dataLength)
{
dataLength += decryptedLength * 0.5;
}
stream.next_out = (Bytef *)c + stream.total_out;
stream.avail_out = (uint)(dataLength - stream.total_out);
status = inflate (&stream, Z_SYNC_FLUSH);
}
if (inflateEnd(&stream) == Z_OK)
{
if (status == Z_STREAM_END)
{
dataLength = stream.total_out;
}
}
}
std::string decryptedContentStr(c, c + dataLength);
return decryptedContentStr;
}
直到今天我才意识到它在这一行因大数据缓冲区(例如:decryptedLength: 342792)而崩溃:
status = inflate (&stream, Z_SYNC_FLUSH);
经过一两次迭代。谁能帮帮我?
【问题讨论】:
-
也许你应该确切地告诉它是如何崩溃的。顺便说一句 - 这可能是堆栈溢出问题吗?
char c[dataLength];约为。 600.000 个字符。 -
解压不是解密。
标签: c++ buffer zlib inflate compression