【问题标题】:Qt : How to debug a bad alloc exception in QByteArray?Qt:如何调试 QByteArray 中的错误分配异常?
【发布时间】:2018-04-03 19:04:18
【问题描述】:

我有一个QNetworkReply,我想将下载的字节存储在QByteArray 中。

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

问题是当大小约为 33552950 时,我得到一个 bad alloc

我不明白是什么问题或如何调试它。

【问题讨论】:

  • 不读取所有缓冲区,而是逐块读取呢?这个文件是32Mb,下一个可以是512Mb。处理这么大的文件应该一块一块地处理。
  • 嗯...我逐块读取它,但出于.....原因我需要在缓冲区中有 40Mb
  • 错误分配可能有两个原因:内存不足和堆损坏。现在 40MB 似乎是一个很正常的大小,所以 valgrind 是你的朋友。

标签: c++ qt qbytearray bad-alloc


【解决方案1】:

根据您的评论,关于在缓冲区中保持 40 MB,我建议使用 QByteArray::reserve() API 提前保留这么多内存(更多会更好)。但是,使用QByteArray,您必须维护总大小、消耗的大小、当前索引等。

另一种解决方案是使用QStringreserve()。您不必维护详细信息。您可以简单地使用QString::append(),然后在需要时使用QString::toUtf8() 将其转换为QByteArray

【讨论】:

    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 2010-11-24
    • 1970-01-01
    • 2019-01-22
    相关资源
    最近更新 更多