QPixmap导致内存泄漏

QPixmap causes memory leak?

本文关键字:泄漏 内存 QPixmap      更新时间:2024-09-26

每次收到有效帧时,我都会从服务器流式传输MJPEG并更新QLabel的QPixmap。内存使用量随着时间的推移而增加,我不知道为什么。这是QPixmap的错误使用吗?

case StreamState::Streaming: {
int ind_start_bytes = m_buffer.indexOf("xffxd8");
int ind_end_bytes = m_buffer.indexOf("xffxd9");
if(ind_start_bytes != -1 && ind_end_bytes != -1) {
if(ind_start_bytes < ind_end_bytes){
QByteArray image_data = m_buffer.mid(ind_start_bytes, ind_end_bytes + 2);
m_buffer = m_buffer.mid(ind_end_bytes+2);
QPixmap pmap;
if(pmap.loadFromData(image_data, "JPEG")) {
setPixmap(pmap.scaled(pmap.size(), Qt::KeepAspectRatio));
}
}
}
}

以下是完整代码的github链接。相关代码为mjpegstreamer.cpp

是m_buffer在膨胀。我发布的代码使用带有fifo逻辑的帧。所以我更换了

int ind_start_bytes = m_buffer.indexOf("xffxd8");
int ind_end_bytes = m_buffer.indexOf("xffxd9");

带有

int ind_start_bytes = m_buffer.lastIndexOf("xffxd8");
int ind_end_bytes = m_buffer.lastIndexOf("xffxd9");

如果m_buffer中存在多个帧,我们将消耗最后一个帧并删除左侧的帧。现在问题似乎已经解决了。这显然与QPixmap无关。