0
zlibを使用して文字列を圧縮したい。私が約1時間後にこの関数をループすると、 "compress"は-4を返します。これはZ_MEM_ERRORを意味します。誰が問題がどこにあるのか知っていますか?私が見ることができるzlibのメモリ不足問題
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;
}
'char * src =(char *)line.c_str();' - >これをしないでください。 c_str()はconst-charへのポインタを返しますので、constをキャストしています。 C++キャスト(この場合はstatic_cast <>)を使用していたなら、コンパイラはあなたに警告することができました。 (これはあなたの問題の理由ではありませんが) –
あなたは最小限の完全な例を投稿できますか?私はqtがここで余分だと思います。 –
再度:C++キャストを使用します。おそらく、あなたは互換性のないポインタを変換します。 '(uLongf *)&destLen' < - なぜあなたはdestLenをuLongfとして宣言しませんか? –