i'd tell strange problem have qt application.
i have 2 windows: first qmainwindow, second qdialog derived class. qmainwindow shows qdialog one, has form , qpushbutton in order use qfiledialog::getopenfilename.
when run app first time (after system boot) have memory problem:
*** error in `/home/nico/documents/projets_qtcreator/build-utilitairetwsgraph-kit_test-debug/utilitairetwsgraph': free(): invalid pointer: 0x000000000090cd40 *** to reproduce problem have restart system, think it's typically corrupted memory error. did investigations:
first, tried find incriminated line using gdb. told me:
program received signal sigabrt, aborted. 0x00007ffff63ac037 in __gi_raise (sig=sig@entry=6) @ ../nptl/sysdeps/unix/sysv/linux/raise.c:56 56 ../nptl/sysdeps/unix/sysv/linux/raise.c: aucun fichier ou dossier de ce type. the stack trace showed:
(gdb) #0 0x00007ffff63ac037 in __gi_raise (sig=sig@entry=6) @ ../nptl/sysdeps/unix/sysv/linux/raise.c:56 #1 0x00007ffff63af698 in __gi_abort () @ abort.c:90 #2 0x00007ffff63e95ab in __libc_message (do_abort=do_abort@entry=2, fmt=fmt@entry=0x7ffff64fc860 "*** error in `%s': %s: 0x%s ***\n") @ ../sysdeps/unix/sysv/linux/libc_fatal.c:199 #3 0x00007ffff63f5a46 in malloc_printerr (ptr=0x90cd40, str=0x7ffff64f8825 "free(): invalid pointer", action=3) @ malloc.c:4902 #4 _int_free (av=<optimized out>, p=0x90cd30, have_lock=0) @ malloc.c:3758 #5 0x00007fffeea21d76 in ?? () /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0 #6 0x00007ffff50f6538 in g_object_unref () /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 #7 0x00007fffeea0f21b in ?? () /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0 #8 0x00007fffeea13584 in ?? () /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0 #9 0x00007ffff50f6538 in g_object_unref () /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 #10 0x00007fffee9b59ea in ?? () /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0 #11 0x00007fffee9eaf5f in ?? () /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0 #12 0x00007ffff50f155e in g_closure_invoke () /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 #13 0x00007ffff51030e4 in ?? () /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 #14 0x00007ffff510ad11 in g_signal_emit_valist () /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 #15 0x00007ffff510af92 in g_signal_emit () /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 #16 0x00007fffeea8f580 in ?? () /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0 #17 0x00007ffff50f7640 in g_object_run_dispose () /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 #18 0x00007fffee9b59ea in ?? () /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0 #19 0x00007fffee9eaf5f in ?? () /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0 #20 0x00007ffff50f155e in g_closure_invoke () /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 #21 0x00007ffff51030e4 in ?? () /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 #22 0x00007ffff510ad11 in g_signal_emit_valist () /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 #23 0x00007ffff510af92 in g_signal_emit () /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 #24 0x00007fffeea8f580 in ?? () /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0 #25 0x00007ffff50f7640 in g_object_run_dispose () /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 #26 0x00007fffee9eaf5f in ?? () /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0 #27 0x00007ffff50f1620 in g_closure_invoke () /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 #28 0x00007ffff51030e4 in ?? () /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 #29 0x00007ffff510ad11 in g_signal_emit_valist () /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 #30 0x00007ffff510af92 in g_signal_emit () /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 #31 0x00007fffeea8f580 in ?? () /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0 #32 0x00007ffff50f7640 in g_object_run_dispose () /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 #33 0x00007ffff7684879 in ?? () /usr/lib/x86_64-linux-gnu/libqtgui.so.4 #34 0x00007ffff77c537a in qfiledialog::getopenfilename(qwidget*, qstring const&, qstring const&, qstring const&, qstring*, qflags<qfiledialog::option>) () /usr/lib/x86_64-linux-gnu/libqtgui.so.4 #35 0x0000000000409277 in fenetreselectionstatusmonitor::selectionnerstatusmonitor (this=0x825710) @ ../utilitairetwsgraph/dev/src/vue/fenetreselectionstatusmonitor.cpp:89 so guessed problem in getopenfilename call.
then, remove modality property of qdialog (had no effects), used valgrind didn't helped me:
invalid free() / delete / delete[] / realloc() ==2237== @ 0x4c2ba6c: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==2237== 0xe194d75: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.17) ==2237== 0x78f3537: g_object_unref (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3600.0) ==2237== 0xe18221a: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.17) ==2237== 0xe186583: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.17) ==2237== 0x78f3537: g_object_unref (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3600.0) ==2237== 0xe1289e9: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.17) ==2237== 0xe15df5e: ??? (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.17) ==2237== 0x78ee55d: g_closure_invoke (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3600.0) ==2237== 0x79000e3: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3600.0) ==2237== 0x7907d10: g_signal_emit_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3600.0) ==2237== 0x7907f91: g_signal_emit (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3600.0) ==2237== address 0x155066d0 720 bytes inside block of size 1,008 alloc'd ==2237== @ 0x4c2a896: memalign (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==2237== 0x4c2a987: posix_memalign (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==2237== 0x6f22a07: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3600.0) ==2237== 0x6f6c3eb: g_slice_alloc (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3600.0) ==2237== 0x6f6c445: g_slice_alloc0 (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.3600.0) ==2237== 0x790e8c4: g_type_create_instance (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3600.0) ==2237== 0x78f9a4b: g_param_spec_internal (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3600.0) ==2237== 0x78fda11: g_param_spec_object (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3600.0) ==2237== 0xd98d4cb: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.3600.0) ==2237== 0x790c955: g_type_class_ref (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3600.0) ==2237== 0x78f535c: g_object_new_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3600.0) ==2237== 0x78f5803: g_object_new (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.3600.0) ==2237== when don't use native dialog, don't have problem. think system dependency or package error, have other application uses getopenfilename (quite same call), can compile , works.
the getopenfilename call in qt slot:
void fenetreselectionstatusmonitor::selectionnerstatusmonitor() { qfiledialog::getopenfilename(this, tr("fichier descriptif du status monitor"), "/home",tr("lst (*.lst)")); } the header file (i removed useless declarations):
#ifndef fenetre_selection_status_monitor #define fenetre_selection_status_monitor #include <qfiledialog> class fenetreselectionstatusmonitor : public qdialog { q_object public: fenetreselectionstatusmonitor(int hauteur, int largeur, qwidget* parent); private slots: void selectionnerstatusmonitor(); }; #endif // fenetre_selection_status_monitor i think i'll try reinstall qt packages because don't have ideas now. checked calling arguments, without finding anything. i'm asking me questions because of lack of stability of program. , if had no problems, don't know how prove program not crash , has no memory leack (valgrind libraries hard use),it's quite desesperating !
thanks lot reading post, hope can me :)
edit: bought new project, having simple qmainwindow calling qdialog calls getopenfilename. have same problem.
this new project has 2 classes , main:
main.cpp:
#include <qapplication> #include "mainwindowtest.h" int main(int argc, char** argv) { qapplication app(argc,argv); mainwindowtest window; window.show(); return app.exec(); } mainwindowtest.h:
#ifndef main_window_test_h #define main_window_test_h #include <qmainwindow> #include <qwidget> #include <qhboxlayout> #include <qpushbutton> #include "dialogtest.h" class mainwindowtest : public qmainwindow { q_object public: mainwindowtest(); private slots: void opendialog(); }; #endif //main_window_test_h dialogtest.h:
#ifndef dialog_test_h #define dialog_test_h #include <qdialog> #include <qwidget> #include <qhboxlayout> #include <qpushbutton> #include <qfiledialog> class dialogtest : public qdialog { q_object public: dialogtest(); private slots: void openfile(); }; #endif //dialog_test_h mainwindowtest.cpp
#include "mainwindowtest.h" mainwindowtest::mainwindowtest() { setminimumsize(200,200); qwidget* widget = new qwidget(); qhboxlayout* layout = new qhboxlayout(); qpushbutton* btnopen = new qpushbutton("open dialog"); connect(btnopen, signal(clicked()), this, slot(opendialog())); layout->addwidget(btnopen); widget->setlayout(layout); setcentralwidget(widget); } void mainwindowtest::opendialog() { dialogtest dialog; dialog.exec(); } dialogtest.cpp
#include "dialogtest.h" dialogtest::dialogtest() { qhboxlayout* layout = new qhboxlayout(); qpushbutton* btnopen = new qpushbutton("open file"); connect(btnopen, signal(clicked()), this, slot(openfile())); layout->addwidget(btnopen); setlayout(layout); } void dialogtest::openfile() { qfiledialog::getopenfilename(this, tr("fichier descriptif du status monitor"), "/home", tr("lst (*.lst)")); }
Comments
Post a Comment