• 6132阅读
  • 1回复

求助,很急!!(已解决) [复制链接]

上一主题 下一主题
离线rqzrqh
 

只看楼主 倒序阅读 楼主  发表于: 2009-07-19
做一个最简单的ui例子,
ui_dialog.h
setupUi(QDialog *)
UI只是一个空dialog时可以正常显示,添加一个部件也可以正常显示
当再添加一个部件时就会出现段错误
user@user-desktop:~/Desktop/test$ ./test
*** glibc detected *** ./test: corrupted double-linked list: 0x08344710 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6[0xb6e95d81]
/lib/tls/i686/cmov/libc.so.6(__libc_malloc+0x8d)[0xb6e96cad]
/home/user/qtsdk-2009.03/qt/lib/libQtCore.so.4(_Z7qMallocj+0x1d)[0xb71c88bd]
/home/user/qtsdk-2009.03/qt/lib/libQtCore.so.4(_ZN10QByteArrayC1EPKc+0x5c)[0xb71d1c8c]
/home/user/qtsdk-2009.03/qt/lib/libQtGui.so.4[0xb7944245]
/home/user/qtsdk-2009.03/qt/lib/libQtGui.so.4[0xb79448cb]
/home/user/qtsdk-2009.03/qt/lib/libQtGui.so.4(_ZN13QFontDatabase4loadEPK12QFontPrivatei+0x48f)[0xb794a38f]
/home/user/qtsdk-2009.03/qt/lib/libQtGui.so.4(_ZNK12QFontPrivate15engineForScriptEi+0x7b)[0xb7922a7b]
/home/user/qtsdk-2009.03/qt/lib/libQtGui.so.4(_ZNK13QFontMetricsF7leadingEv+0x27)[0xb793c4b7]
/home/user/qtsdk-2009.03/qt/lib/libQtGui.so.4[0xb786be7c]
/home/user/qtsdk-2009.03/qt/lib/libQtGui.so.4[0xb786c971]
/home/user/qtsdk-2009.03/qt/lib/libQtGui.so.4(_ZNK12QFontMetrics12boundingRectERK5QRectiRK7QStringiPi+0xe5)[0xb793ced5]
/home/user/qtsdk-2009.03/qt/lib/libQtGui.so.4(_ZNK12QFontMetrics4sizeEiRK7QStringiPi+0x67)[0xb793cf87]
/home/user/qtsdk-2009.03/qt/lib/libQtGui.so.4(_ZNK11QPushButton8sizeHintEv+0x1e9)[0xb7bab5c9]
/home/user/qtsdk-2009.03/qt/lib/libQtGui.so.4(_ZNK13QWidgetItemV222updateCacheIfNecessaryEv+0x46)[0xb7750ad6]
/home/user/qtsdk-2009.03/qt/lib/libQtGui.so.4(_ZNK13QWidgetItemV211maximumSizeEv+0x88)[0xb7750fc8]
/home/user/qtsdk-2009.03/qt/lib/libQtGui.so.4[0xb772bdde]
/home/user/qtsdk-2009.03/qt/lib/libQtGui.so.4(_ZN10QBoxLayout11setGeometryERK5QRect+0x5cc)[0xb772cd1c]
/home/user/qtsdk-2009.03/qt/lib/libQtGui.so.4(_ZN14QLayoutPrivate8doResizeERK5QSize+0x8c)[0xb774c2bc]
/home/user/qtsdk-2009.03/qt/lib/libQtGui.so.4(_ZN7QLayout8activateEv+0x198)[0xb774cdc8]
/home/user/qtsdk-2009.03/qt/lib/libQtGui.so.4(_ZN7QWidget10setVisibleEb+0x11d)[0xb777ce5d]
/home/user/qtsdk-2009.03/qt/lib/libQtGui.so.4(_ZN14QWidgetPrivate12showChildrenEb+0x12d)[0xb777889d]
/home/user/qtsdk-2009.03/qt/lib/libQtGui.so.4(_ZN14QWidgetPrivate11show_helperEv+0x5e)[0xb777894e]
/home/user/qtsdk-2009.03/qt/lib/libQtGui.so.4(_ZN7QWidget10setVisibleEb+0x363)[0xb777d0a3]
/home/user/qtsdk-2009.03/qt/lib/libQtGui.so.4(_ZN7QDialog10setVisibleEb+0x76)[0xb7c33fd6]
./test(_ZN7QWidget5eventEP6QEvent+0xa3a)[0x804ab52]
./test(_ZN7QWidget5eventEP6QEvent+0x9bf)[0x804aad7]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe0)[0xb6e3f450]
./test(_ZNK7QDialog8sizeHintEv+0x69)[0x804a291]
======= Memory map: ========
08048000-0804c000 r-xp 00000000 08:01 3113275    /home/user/Desktop/test/test
0804c000-0804d000 rw-p 00003000 08:01 3113275    /home/user/Desktop/test/test
0804d000-0839a000 rw-p 0804d000 00:00 0          [heap]
b5000000-b5021000 rw-p b5000000 00:00 0
b5021000-b5100000 ---p b5021000 00:00 0
b5138000-b6525000 r--p 00000000 08:01 2525282    /usr/share/fonts/truetype/arphic/uming.ttf
b6525000-b6527000 r-xp 00000000 08:01 2424849    /usr/lib/pango/1.6.0/modules/pango-basic-fc.so
b6527000-b6528000 rw-p 00001000 08:01 2424849    /usr/lib/pango/1.6.0/modules/pango-basic-fc.so
b6528000-b654a000 r--p 00000000 08:01 2525334    /usr/share/fonts/truetype/ttf-arabeyes/ae_AlYermook.ttf
b654a000-b6550000 r-xp 00000000 08:01 2359394    /usr/lib/gtk-2.0/2.10.0/immodules/im-xim.so
b6550000-b6551000 rw-p 00005000 08:01 2359394    /usr/lib/gtk-2.0/2.10.0/immodules/im-xim.so
b6551000-b6562000 r-xp 00000000 08:01 2359368    /usr/lib/gtk-2.0/2.10.0/engines/libglide.so
b6562000-b6563000 rw-p 00010000 08:01 2359368    /usr/lib/gtk-2.0/2.10.0/engines/libglide.so
b6563000-b6583000 r--p 00000000 08:01 2509727    /usr/share/locale-langpack/zh_CN/LC_MESSAGES/gtk20-properties.mo
b6583000-b6593000 r--p 00000000 08:01 2509720    /usr/share/locale-langpack/zh_CN/LC_MESSAGES/gtk20.mo
b6593000-b65bb000 r-xp 00000000 08:01 2295576    /usr/lib/libpixman-1.so.0.10.0
b65bb000-b65bc000 rw-p 00027000 08:01 2295576    /usr/lib/libpixman-1.so.0.10.0
b65bc000-b65de000 r-xp 00000000 08:01 2297846    /usr/lib/libpng12.so.0.15.0
b65de000-b65df000 rw-p 00021000 08:01 2297846    /usr/lib/libpng12.so.0.15.0
b65df000-b6605000 r-xp 00000000 08:01 2296914    /usr/lib/libpangoft2-1.0.so.0.2002.3
b6605000-b6606000 rw-p 00026000 08:01 2296914    /usr/lib/libpangoft2-1.0.so.0.2002.3
b6606000-b6666000 r-xp 00000000 08:01 2296777    /usr/lib/libcairo.so.2.17.3
b6666000-b6668000 rw-p 0005f000 08:01 2296777    /usr/lib/libcairo.so.2.17.3
b6668000-b6681000 r-xp 00000000 08:01 2295442    /usr/lib/libatk-1.0.so.0.2009.1
b6681000-b6683000 rw-p 00018000 08:01 2295442    /usr/lib/libatk-1.0.so.0.2009.1
b6683000-b6685000 r-xp 00000000 08:01 2295378    /usr/lib/libXdamage.so.1.1.0
b6685000-b6686000 rw-p 00001000 08:01 2295378    /usr/lib/libXdamage.so.1.1.0
b6686000-b66c1000 r-xp 00000000 08:01 2294156    /usr/lib/libpango-1.0.so.0.2002.3
b66c1000-b66c3000 rw-p 0003a000 08:01 2294156    /usr/lib/libpango-1.0.so.0.2002.3
b66c3000-b66cb000 r-xp 00000000 08:01 2295505    /usr/lib/libpangocairo-1.0.so.0.2002.3
b66cb000-b66cc000 rw-p 00008000 08:01 2295505    /usr/lib/libpangocairo-1.0.so.0.2002.3
b66cc000-b6750000 r-xp 00000000 08:01 2295623    /usr/lib/libgdk-x11-2.0.so.0.1200.0
b6750000-b6753000 rw-p 00084000 08:01 2295623    /usr/lib/libgdk-x11-2.0.so.0.1200.0
b6753000-b676a000 r-xp 00000000 08:01 2295625    /usr/lib/libgdk_pixbuf-2.0.so.0.1200.0
b676a000-b676b000 rw-p 00016000 08:01 2295625    /usr/lib/libgdk_pixbuf-2.0.so.0.1200.0
b676b000-b6ae8000 r-xp 00000000 08:01 2295778    /usr/lib/libgtk-x11-2.0.so.0.1200.0
b6ae8000-b6aef000 rw-p 0037c000 08:01 2295778    /usr/lib/libgtk-x11-2.0.so.0.1200.0
b6aef000-b6af0000 rw-p b6aef000 00:00 0
b6af0000-b6af9000 r-xp 00000000 08:01 347139     /lib/tls/i686/cmov/libnss_files-2.7.so
b6af9000-b6afb000 rw-p 00008000 08:01 347139     /lib/tls/i686/cmov/libnss_files-2.7.so
b6afb000-b6b03000 r-xp忽略 (core dumped)
调试输出
#0  QString::operator== (this=0x199, other=@0xbfe2a3d0)
    at ../../include/QtCore/../../src/corelib/tools/qstring.h:104
#1  0xb7af0735 in QAbstractButton::setText (this=0x8344468, text=@0xbfe2a3d0)
    at /var/tmp/qt-x11-src-4.5.2/src/gui/widgets/qabstractbutton.cpp:633
#2  0x0804a568 in Ui_logindialog::retranslateUi (this=0xb6f67210,
    logindialog=0x83438f0) at ui_logindialog.h:45
#3  0x0804a745 in Ui_logindialog::setupUi (this=0xb6f67210,
    logindialog=0x83438f0) at ui_logindialog.h:37
#4  0x0804a324 in LoginDialog (this=0x83438f0, parent=0x0, f=@0xbfe2a488)
    at logindialog.cpp:5
#5  0x0804a7ea in main (argc=137646480, argv=0xb73ba318) at main.cpp:6

求高手帮忙!!
[ 此帖被rqzrqh在2009-07-20 08:25重新编辑 ]
离线rqzrqh

只看该作者 1楼 发表于: 2009-07-20
原来定义的是Ui::logindialog  *ui;
因为在书上看到是直接ui->setupUi(this),当时也没有注意

修改方法:在构造函数前要加ui=new Ui:;logindialog,析构函数里加delete  ui,切记指针使用前要new,或者使它指向NULL
也可以定义为变量,那么就不需要ui=new Ui::logindialog了,但使用指针可以在用的时候分配,定义的时候并不分配

心得:
由于类定义了之后,ui分配了4字节的指针空间,而这4字节空间中的数值是不确定的,当空间中的线性地址超过操作系统分配给程序的空间大小后,就会发生地址越界,即段错误
也正因为4字节中的数值是不确定的,有些时候里面的地址恰好在程序的线性地址范围之内,jiu shi cheng gong de.
keyi  jiehe caozuoxitong yuanli de dizhi fenpei zhe yi zhang

就这样,有些时候运行成功,有些时候段错误
快速回复
限100 字节
 
上一个 下一个