我想使用zlib压缩字符串。如果我在大约一个小时之后将此函数放入循环中,则“compress”返回-4,这意味着Z_MEM_ERROR。谁知道问题出在哪里?
std::string compressData(std::string const& line)
{
char *src=(char*)line.c_str();
int srcLen=strlen(src);
int destLen=compressBound(srcLen);
char *dest=new char[destLen];
int result=compress((unsigned char *)dest ,(uLongf*)&destLen ,(const unsigned char *)src ,srcLen );
QByteArray sd = QByteArray::fromRawData(dest, destLen);
QString hexZipData (sd.toHex());
std::string hexZipDataStr = hexZipData.toStdString();
if( result != Z_OK)
{
hexZipDataStr = "";
std::cout << "error !";
}
delete []dest;
dest = NULL;
return hexZipDataStr;
}
答案 0 :(得分:0)
我能看到的唯一可疑地点是您提供int destLen
作为uLongf
类型的输出参数。如果uLongf
大于int
,这可能会炸毁您的堆栈,而“长”部分则表明在64位平台上可能会如此。
我建议您立即声明类型destLen
的{{1}}并避免演员。
除此之外,我无法解决您的代码问题。