gpt4 book ai didi

Qt 内存管理。怎么了?

转载 作者:行者123 更新时间:2023-12-04 06:44:49 25 4
gpt4 key购买 nike

我有一个关于 Qt 内存泄漏的问题。

我有一个带有 2 个 QPushButton 的 QMainWindow。

第一个按钮点击信号:

m_label = new QLabel(this);

QPixmap pix(this->size());
QPainter painter;
painter.begin(&pix);

QImage img("1.png");
painter.drawPixmap(this->rect(), QPixmap::fromImage(img));
m_label->setPixmap(pix);

painter.end();

第二个按钮点击信号:
delete m_label;

当我启动测试应用程序时,分配的内存约为 11900 Kb
当我单击第一个按钮时,为应用程序分配的内存约为 12450 Kb
当我点击第二个按钮时,我分配了大约 12250 Kb 的内存

为什么我没有得到相同的 11900 Kb?这是泄漏吗?

所以如果要写如下代码:
QImage img("1.png");
QImage img1("1.png");
QImage img2("1.png");
QImage img3("1.png");
QImage img4("1.png");
QImage img5("1.png");
QImage img6("1.png");
QImage img7("1.png");
QImage img8("1.png");
QImage img9("1.png");

然后分配的内存会增加但不会减少。为什么?如何清理这个内存泄漏?

最佳答案

  • 在第一次调用 QImage img("1.png") 之后,Qt 加载图像格式插件,并在使用后加载它们(为了性能问题)。所以剩下的部分内存来自加载的插件,这不是泄漏。
  • 你在哪里分配那些 QImages (img...img9 case)?你确定它们超出了范围?
  • 请记住,在您的软件释放内存后,操作系统并不总是立即保留内存。
  • 关于Qt 内存管理。怎么了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3865773/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com