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