![](/img/trans.png)
[英]Ensure a QByteArray owns its memory (QByteArray::fromRawData)
[英]Memory Managing QByteArray::fromRawData()
在我的程序中,我有一个处理一些数据并将其发送回的函数。 在函数中,我使用以下内容分配了一个新的字节数组:
byte *buffer = new byte[bufferSize];
然后,我将其传递给一个填充有一些数据的库。 完成后,我想将其作为QByteArray
发送回去。 所以我打电话给:
myByteArray = QByteArray::fromRawData(reinterpret_cast<const char*>(buffer), bufferSize);
字节数组返回并一切正常,但是现在我发生了内存泄漏(自从我调用此方法数千次以来,我的内存使用量就激增了,这是非常确定的)。 当使用new分配buffer
时,在调用fromRawData
之后无法删除它,因为myByteArray
共享相同的数据指针。 文档状态The bytes are not copied. The QByteArray will contain the data pointer.
The bytes are not copied. The QByteArray will contain the data pointer.
所以我的问题是,当myByteArray
超出范围时,如何确保删除buffer
? 它超出了调用该函数的类的范围。
谢谢你的时间。
您可以直接从QByteArray
开始,而不是使用new[]
手动分配数组。
QByteArray myByteArray;
myByteArray.resize( bufferSize );
byte * buffer = myByteArray.data(); // Pointer to the memory allocated by the QByteArray
// Pass 'buffer' to library function..
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.