c++ - 内存管理 QByteArray::fromRawData()

标签 c++ qt

在我的程序中,我有一个函数可以处理一些数据并将其发回。在函数中,我使用以下内容分配了一个新的字节数组:

byte *buffer = new byte[bufferSize];

然后我将它传递给一个用一些数据填充它的库。完成后,我想将其作为 QByteArray 发回。所以我打电话:

myByteArray = QByteArray::fromRawData(reinterpret_cast<const char*>(buffer), bufferSize);

字节数组被返回并且一切正常,但是我现在有内存泄漏(很确定,因为我调用它数千次后我的 RAM 使用率飙升)。当我用 new 分配 buffer 时,我无法在调用 fromRawData 后删除它,因为 myByteArray 共享相同的数据指针。 documentation states 字节未被复制。 QByteArray 将包含数据指针。

所以我的问题是,当 myByteArray 超出范围时,如何确保 buffer 被删除?它超出了调用该函数的类的范围。

感谢您的宝贵时间。

最佳答案

无需使用 new[] 手动分配数组,您可以直接从 QByteArray 开始。

QByteArray myByteArray;
myByteArray.resize( bufferSize );
byte * buffer = myByteArray.data(); // Pointer to the memory allocated by the QByteArray
// Pass 'buffer' to library function..

关于c++ - 内存管理 QByteArray::fromRawData(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44248551/

相关文章:

c++ - 如何清除 QTreeView/QFileSystemModel

c++ - iOS 上的 libsndfile

c++ - 预编译头 - 从所有其他文件中删除所有预编译头所必需的

qt - LLDB 数据格式化程序可以调用方法吗?

c++ - 提供 QtConcurrent 功能的通用 C++ 库?

c++ - 我是一名经验丰富的 C++ 开发人员 - 我如何才能进入游戏行业?

c++ - QT 小部件与 QT GUI

c++ - Qt C++ QDomDocument,递归迭代 XML 数据,检索没有子数据的文本元素

c++ - 有效比较 QString 和 std::string 是否相等

c++ - 如何将 PHYSICAL_MONITOR 与监视器 DeviceID 关联