内存管理QByteArray :: fromRawData()

时间:2017-05-29 18:26:45

标签: c++ qt

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

byte *buffer = new byte[bufferSize];

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

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

字节数组返回并且一切运行正常,但是我现在有一个内存泄漏(非常确定,因为我的RAM使用量猛增,因为我称之为数千次)。当我使用new分配buffer时,我无法在调用fromRawData后将其删除,因为myByteArray共享相同的数据指针。 documentationThe bytes are not copied. The QByteArray will contain the data pointer.

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

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

您可以直接使用var center_label = gauge.label() .text('<span style="color: #64B5F6; font-size: 13px">Wind Direction: </span>' + '<span style="color: #5AA3DD; font-size: 15px">' + 120 + '\u00B0 (+/- 0.5\u00B0)' + '</span><br>' + '<span style="color: #1976d2; font-size: 13px">Wind Speed:</span> ' + '<span style="color: #166ABD; font-size: 15px">' + 12 + 'm/s' + '</span>').useHtml(true) .textSettings(bigTooltipTitleSettings); center_label .hAlign('center') .anchor('centerTop') .offsetY(-20) .padding(15, 20) .background( { fill: '#fff', stroke: { thickness: 1, color: '#E0F0FD' } } ); center_label.background() .cornerType('round') .corners(10); 开始,而不是使用new[]手动分配数组。

QByteArray