在我的程序中,我有一个处理某些数据并将其发回的函数。在函数中,我使用以下内容分配一个新的字节数组:
byte *buffer = new byte[bufferSize];
然后我将它传递给一个用一些数据填充它的库。完成后,我想将其作为QByteArray
发回。所以我打电话给:
myByteArray = QByteArray::fromRawData(reinterpret_cast<const char*>(buffer), bufferSize);
字节数组返回并且一切运行正常,但是我现在有一个内存泄漏(非常确定,因为我的RAM使用量猛增,因为我称之为数千次)。当我使用new分配buffer
时,我无法在调用fromRawData
后将其删除,因为myByteArray
共享相同的数据指针。 documentation州The bytes are not copied. The QByteArray will contain the data pointer.
所以我的问题是,当buffer
超出范围时,如何确保myByteArray
被删除?它超出了调用函数的类的范围。
感谢您的时间。
答案 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