Проблема с нехваткой памяти у zlib - PullRequest
0 голосов
/ 06 июля 2011

Я хочу сжать строку, используя 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 голосов
/ 06 июля 2011

Единственное подозрительное место, которое я вижу, это то, что вы указываете int destLen в качестве выходного параметра типа uLongf.Это может взорвать ваш стек, если uLongf больше int, и «длинная» часть предполагает, что это может быть так на 64-битных платформах.

Я бы рекомендовал вам объявить destLen изНапечатайте uLongf прямо сейчас и избегайте приведения.

Кроме этого, я не могу вызвать никаких проблем с вашим кодом.

...