zlib的内存不足问题

时间:2011-07-06 10:04:44

标签: c++ zlib

我想使用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;
}

1 个答案:

答案 0 :(得分:0)

我能看到的唯一可疑地点是您提供int destLen作为uLongf类型的输出参数。如果uLongf大于int,这可能会炸毁您的堆栈,而“长”部分则表明在64位平台上可能会如此。

我建议您立即声明类型destLen的{​​{1}}并避免演员。

除此之外,我无法解决您的代码问题。