• 6875阅读
  • 3回复

[提问]新建一个qt项目(qtcreator)什么也不做直接运行也会内存溢出? [复制链接]

上一主题 下一主题
离线zkicker
 

只看楼主 倒序阅读 楼主  发表于: 2011-02-10
最近在查找内存溢出的问题,编的程序占用的内存越来越大,打算从头开始找,新建一个项目直接运行照样报溢出。。。。无语了。查看内存的工具用的是valgrind,而溢出的都是一些库文件啊。。。。有没有大侠遇到过这个问题?
离线jdwx

只看该作者 1楼 发表于: 2011-02-10
好像不可能,还是上代码看看,包括exe?
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线梅克斯
只看该作者 2楼 发表于: 2011-02-11
因为qt本身有指定父指针,然后子项在父项销毁时可以自动销毁的机制,所以有的内存检测工具不一定能正确检测出来
离线zkicker

只看该作者 3楼 发表于: 2011-02-11
回 1楼(jdwx) 的帖子
这是我做的一个小程序,让图片周期闪烁的。开始运行没问题,但占内存越来越多,最后闪烁就很不规律了。。。看不出程序里哪有内存泄露的,请帮帮忙吧

ui就不贴了,主窗体QWidget和一个frame,frame用来显示png图片

widget.h:
  1. #ifndef WIDGET_H
  2. #define WIDGET_H
  3. #include <QWidget>
  4. #include <QTimer>
  5. #include <QFrame>
  6. namespace Ui {
  7.     class Widget;
  8. }
  9. class Widget : public QWidget
  10. {
  11.     Q_OBJECT
  12. public:
  13.     explicit Widget(QWidget *parent = 0);
  14.     ~Widget();
  15. private:
  16.     Ui::Widget *ui;
  17.     void paintEvent(QPaintEvent *);
  18.     void paintPics(QFrame *frame,QString pic);
  19.     QTimer *refreshTimer;
  20.     int aaMaintainTimes;
  21.     int NullMaintainTimes;
  22.     bool arPicDisplay;
  23. private slots:
  24.     void refreshFunc();
  25. };
  26. #endif // WIDGET_H


main.cpp
  1. #include <QtGui/QApplication>
  2. #include "widget.h"
  3. int main(int argc, char *argv[])
  4. {
  5.     QApplication a(argc, argv);
  6.     Widget w;
  7.     w.show();
  8.     return a.exec();
  9. }  


widget.cpp
  1. #include "widget.h"
  2. #include "ui_widget.h"
  3. #include <QPalette>
  4. #include <QPixmap>
  5. Widget::Widget(QWidget *parent) :
  6.     QWidget(parent),
  7.     ui(new Ui::Widget)
  8. {
  9.     ui->setupUi(this);
  10.     this->aaMaintainTimes=0;
  11.     this->NullMaintainTimes=0;
  12.     this->arPicDisplay=true;
  13.     refreshTimer=new QTimer(this);
  14.     refreshTimer->start(500);
  15.     connect(refreshTimer,SIGNAL(timeout()),this,SLOT(refreshFunc()));
  16. }
  17. void Widget::paintEvent(QPaintEvent *)
  18. {
  19.     if(this->arPicDisplay)
  20.     {
  21.         paintPics(ui->frame,"images/aa.png");
  22.         this->NullMaintainTimes=0;
  23.         this->aaMaintainTimes++;
  24.         if(this->aaMaintainTimes>2)
  25.         {
  26.             this->arPicDisplay=false;
  27.         }
  28.     }
  29.     else
  30.     {
  31.         paintPics(ui->frame,"images/Null.png");
  32.         this->aaMaintainTimes=0;
  33.         this->NullMaintainTimes++;
  34.         if(this->NullMaintainTimes>2)
  35.         {
  36.             this->arPicDisplay=true;
  37.         }
  38.     }
  39. }  
  40. void Widget::refreshFunc()
  41. {
  42.     update();
  43. }
  44. void Widget::paintPics(QFrame *frame, QString pic)
  45. {
  46.     QPixmap pixmap(pic);
  47.     QPalette palette;
  48.     palette.setBrush(frame->backgroundRole(),QBrush(pixmap));
  49.     frame->setPalette(palette);
  50.     frame->setAutoFillBackground(true);
  51.     frame->show();
  52. }
  53. Widget::~Widget()
  54. {
  55.     delete ui;
  56. }  

快速回复
限100 字节
 
上一个 下一个