2017-10-23 7 views
0

私はQNetworkReplyを持っており、ダウンロードしたバイトをQByteArrayに保存したいと思います。Qt:QByteArrayで不正なalloc例外をデバッグする方法は?

connect(_replyRef, SIGNAL(readyRead()), this, SLOT(PushDownloadedBytesToFile())); 
void PushDownloadedBytesToFile() 
{ 
    _internalBufferBytes.append(_replyRef->readAll()); 
} 

問題は、サイズが約33552950.

私が問題かどのように私はこれをデバッグすることができますが何であるかを理解していないされたとき、私はbad allocを得るということです。

+1

バッファをすべて読み取らず、チャンクでチャンクしますか?このファイルは32Mbですが、次のファイルは512Mbです。このような大きなファイルの処理は、1つずつ行う必要があります。 –

+0

まあ...私はそれをチャンクで読みましたが、理由のためにバッファに40Mbを持っている必要があります。 – user3132974

+1

メモリが不足していてヒープが壊れている可能性があります。最近の40MBは普通のサイズに見えるので、valgrindはあなたの友人です。 –

答えて

0

バッファから40MBを維持することに関しては、あらかじめQByteArray::reserve() APIを使用してこの多くのメモリを予約することをお勧めします。しかし、QByteArrayでは、合計サイズ、消費サイズ、現在のインデックスなどを維持する必要があります。

QStringreserve()とすることもできます。詳細を維持する必要はありません。 QString::append()をそのまま使用して、必要に応じてQString::toUtf8()を使用してQByteArrayに変換してください。

関連する問題