• 6352阅读
  • 2回复

内存泄露问题 [复制链接]

上一主题 下一主题
离线bilyecit
 

只看楼主 倒序阅读 楼主  发表于: 2010-02-23
      很简单的一段显示背景图片的测试代码,不知道为什么会出现内存泄露,有兴趣的帮忙看看,不胜感激!
问题描述:
程序运行时能正常显示背景图片,但关闭程序后出现内存泄露的提示信息,如下:

[root@localhost test1]# ./test1
*** glibc detected *** ./test1: double free or corruption (out): 0xbf8de600 ***
======= Backtrace: =========
/lib/libc.so.6[0xe64ac1]
/lib/libc.so.6(cfree+0x90)[0xe680f0]
/usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0x2caf6f1]
/share/qt-x11-opensource-src-4.5.2/lib/libQtCore.so.4(_ZN14QObjectPrivate14deleteChildrenEv+0x61)[0xcdb1e1]
/share/qt-x11-opensource-src-4.5.2/lib/libQtGui.so.4(_ZN7QWidgetD2Ev+0x1de)[0x35088e]
/share/qt-x11-opensource-src-4.5.2/lib/libQtGui.so.4(_ZN11QMainWindowD1Ev+0x31)[0x72a3a1]
./test1(__gxx_personality_v0+0x25b)[0x8049fb7]
/lib/libc.so.6(__libc_start_main+0xe0)[0xe11390]
./test1(_ZNK7QWidget15minimumSizeHintEv+0x45)[0x8049e41]
======= Memory map: ========
00110000-00111000 r-xp 00110000 00:00 0 [vdso]
00111000-00115000 r-xp 00000000 08:03 523792 /lib/libgthread-2.0.so.0.1400.2
00115000-00116000 rwxp 00003000 08:03 523792 /lib/libgthread-2.0.so.0.1400.2
00116000-0011d000 r-xp 00000000 08:03 523751 /lib/librt-2.7.so
0011d000-0011e000 r-xp 00007000 08:03 523751 /lib/librt-2.7.so
0011e000-0011f000 rwxp 00008000 08:03 523751 /lib/librt-2.7.so
0011f000-00121000 r-xp 00000000 08:03 4076041 /usr/lib/libXau.so.6.0.0
00121000-00122000 rwxp 00001000 08:03 4076041 /usr/lib/libXau.so.6.0.0
00122000-00123000 r-xp 00000000 08:03 4076044 /usr/lib/libxcb-xlib.so.0.0.0
00123000-00124000 rwxp 00000000 08:03 4076044 /usr/lib/libxcb-xlib.so.0.0.0
00124000-00126000 r-xp 00000000 08:03 1858914 /usr/lib/gconv/UTF-16.so
00126000-00127000 r-xp 00001000 08:03 1858914 /usr/lib/gconv/UTF-16.so
00127000-00128000 rwxp 00002000 08:03 1858914 /usr/lib/gconv/UTF-16.so
00128000-0012a000 r-xp 00000000 08:03 4076147 /usr/lib/libwacomcfg.so.0.0.1
0012a000-0012b000 rwxp 00001000 08:03 4076147 /usr/lib/libwacomcfg.so.0.0.1
0012c000-0013e000 r-xp 00000000 08:03 523739 /lib/libz.so.1.2.3
0013e000-0013f000 rwxp 00011000 08:03 523739 /lib/libz.so.1.2.3
0013f000-00166000 r-xp 00000000 08:03 523740 /lib/libm-2.7.so
00166000-00167000 r-xp 00026000 08:03 523740 /lib/libm-2.7.so
00167000-00168000 rwxp 00027000 08:03 523740 /lib/libm-2.7.so
00168000-0016d000 r-xp 00000000 08:03 4076042 /usr/lib/libXdmcp.so.6.0.0
0016d000-0016e000 rwxp 00004000 08:03 4076042 /usr/lib/libXdmcp.so.6.0.0
00170000-0017f000 r-xp 00000000 08:03 4076050 /usr/lib/libXext.so.6.4.0
0017f000-00180000 rwxp 0000e000 08:03 4076050 /usr/lib/libXext.so.6.4.0
00182000-001a1000 r-xp 00000000 08:03 523745 /lib/libexpat.so.1.5.2
001a1000-001a3000 rwxp 0001f000 08:03 523745 /lib/libexpat.so.1.5.2
001a5000-001a7000 r-xp 00000000 08:03 4076058 /usr/lib/libXinerama.so.1.0.0
001a7000-001a8000 rwxp 00001000 08:03 4076058 /usr/lib/libXinerama.so.1.0.0
001aa000-001ae000 r-xp 00000000 08:03 4076056 /usr/lib/libXfixes.so.3.1.0
001ae000-001af000 rwxp 00003000 08:03 4076056 /usr/lib/libXfixes.so.3.1.0
001b5000-001d0000 r-xp 00000000 08:03 523735 /lib/ld-2.7.so
001d0000-001d1000 r-xp 0001a000 08:03 523735 /lib/ld-2.7.so
001d1000-001d2000 rwxp 0001b000 08:03 523735 /lib/ld-2.7.so
001d2000-00b5e000 r-xp 00000000 08:03 3468131 /share/qt-x11-opensource-src-4.5.2/lib/libQtGui.so.4.5.2
00b5e000-00b84000 rwxp 0098b000 08:03 3468131 /share/qt-x11-opensource-src-4.5.2/lib/libQtGui.so.4.5.2
00b84000-00b87000 rwxp 00b84000 00:00 0
00b87000-00dbc000 r-xp 00000000 08:03 2938903 /share/qt-x11-opensource-src-4.5.2/lib/libQtCore.so.4.5.2
00dbc000-00dc3000 rwxp 00235000 08:03 2938903 /share/qt-x11-opensource-src-4.5.2/lib/libQtCore.so.4.5.2
00dc3000-00dc4000 rwxp 00dc3000 00:00 0
00dc4000-00dce000 r-xp 00000000 08:03 521836 /lib/libnss_files-2.7.so
00dce000-00dcf000 r-xp 00009000 08:03 521836 /lib/libnss_files-2.7.so
00dcf000-00dd0000 rwxp 0000a000 08:03 521836 /lib/libnss_files-2.7.so
00ddb000-00dde000 r-xp 00000000 08:03 523737 /lib/libdl-2.7.so
00dde000-00ddf000 r-xp 00002000 08:03 523737 /lib/libdl-2.7.so
00ddf000-00de0000 rwxp 00003000 08:03 523737 /lib/libdl-2.7.so
00de2000-00df7000 r-xp 00000000 0已放弃




代码如下:

//MainWindow.h
#pragma once
#include <QWidget>

class CTest :public QWidget
{
Q_OBJECT
public:
CTest(QWidget *parent=NULL);
~CTest();
void paintEvent(QPaintEvent *event);
private:

};

//MainWindow.cpp
#include "MainWindow.h"
#include <QtGui>


CTest::CTest(QWidget *parent/* =NULL */)
:QWidget(parent)
{

}


CTest::~CTest()
{

}


void CTest::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
QImage img("back.bmp");
img = img.scaled(width(),height());
painter.drawImage(0,0,img);
}

//main.cpp
#include "MainWindow.h"


#include <QApplication>
#include <QMainWindow>

int main( int argc, char **argv)
{
QApplication app(argc, argv);
CTest test;
QMainWindow MainWindow;
MainWindow.setCentralWidget(&test);
MainWindow.resize(640,480);
MainWindow.show();
return app.exec();
}




离线bilyecit

只看该作者 1楼 发表于: 2010-02-23
问题找到了
将以下两行的顺序调换一下即可。
CTest test;
QMainWindow MainWindow;
离线hercules

只看该作者 2楼 发表于: 2010-02-25
引用第1楼bilyecit于2010-02-23 13:40发表的  :
问题找到了
将以下两行的顺序调换一下即可。
CTest test;
QMainWindow MainWindow;


你这个问题属于 double free
我的QQ号:337396132
欢迎大家加我为好友,一起学习Qt
快速回复
限100 字节
 
上一个 下一个