Speicherzugriffsfehler... ist ja eigentlich ein alter Hut ...
-
Hey Leute,
ich hab hier ein Programm bei dessen Ausführung ein Speicherzugriffsfehler auftritt ... is ja eigentlich ne "gewöhliche" Sache, aber ich und andere können den Fehler einfach nicht finden ... also erstmal nen bisschen Code...
mainwindow.h
... Kernel *Core; ...
mainwindow.cpp
... QString eingabe = QInputDialog::getText(this, "Erstellen", QString::fromUtf8("Bitte Namen für das neue Modul eingeben")); ... Core->addModul(eingabe); ...
kernel.h
... void addModul(QString Name); QList<Modul*> *modulliste; ...
kernel.cpp
... void Kernel::addModul(QString Name) { modulliste->append(new Modul(Name)); //modulliste wird weiter oben im Konstruktor initialisiert } ...
modul.h
... Modul(QString Name); QString *name; ...
modul.cpp
... Modul::Modul(QString Name) { name = new QString(Name); }
Sooo ... und ich vermute, dass das Problem da liegt, wo in Kernel::addModul() in die modulliste eine neue Instanz von Modul erzeugt wird ... wenn ich nämlich einfach mal in der Kernel-Klasse schon in kernel.h eine Instanz von Modul deklariere und die dann in Kernel::addModul() initialisiere (ich hoffe meine Begrifflichkeiten stimmen soweit*g*), kommt wieder nen Fehler, wenn ich aber beides in Kernel::addModul() mache, also da steht
Modul *test = new Modul(QString::QString("test"));
dann geht alles ... bloß <test> ist dann ja nich global
Und wenn ich den gleichen Spaß mal in meiner Hauptklasse MainWindow (von QMainWindow) mache, gehts mit beiden Varianten ...Hoffe ihr habt mich verstanden, wenn nich fragt nach
thx
Franz
-
Ich hab es nicht verstanden. Aber hast du schon valgrind drauf angesetzt?
-
Spuckt an der betreffenden Stelle folgendes ... aber was soll denn da uninitialisiert sein?
==10908== Use of uninitialised value of size 4 ==10908== at 0x804C797: Kernel::addModul(QString) (in /home/f_kissig/editor/bin/editor) ==10908== by 0x804AAB7: MainWindow::FaddModul() (in /home/f_kissig/editor/bin/editor) ==10908== by 0x804C9B2: MainWindow::qt_metacall(QMetaObject::Call, int, void**) (in /home/f_kissig/editor/bin/editor) ==10908== by 0x1C1997E6: QMetaObject::activate(QObject*, int, int, void**) (in /usr/lib/libQtCore.so.4.1.0) ==10908== by 0x1C199A29: QMetaObject::activate(QObject*, QMetaObject const*, int, int, void**) (in /usr/lib/libQtCore.so.4.1.0) ==10908== by 0x1BD967ED: QAbstractButton::clicked(bool) (in /usr/lib/libQtGui.so.4.1.0) ==10908== by 0x1BC40CE6: QAbstractButtonPrivate::click() (in /usr/lib/libQtGui.so.4.1.0) ==10908== by 0x1BC40F1D: QAbstractButton::mouseReleaseEvent(QMouseEvent*) (in /usr/lib/libQtGui.so.4.1.0) ==10908== by 0x1BA7BFCC: QWidget::event(QEvent*) (in /usr/lib/libQtGui.so.4.1.0) ==10908== by 0x1BC413B2: QAbstractButton::event(QEvent*) (in /usr/lib/libQtGui.so.4.1.0) ==10908== by 0x1BA3B5D0: QApplicationPrivate::notify_helper(QObject*, QEvent*) (in /usr/lib/libQtGui.so.4.1.0) ==10908== by 0x1BA3D423: QApplication::notify(QObject*, QEvent*) (in /usr/lib/libQtGui.so.4.1.0) ==10908== ==10908== Invalid read of size 4 ==10908== at 0x804C858: QList<Modul*>::append(Modul* const&) (in /home/f_kissig/editor/bin/editor) ==10908== by 0x804C79E: Kernel::addModul(QString) (in /home/f_kissig/editor/bin/editor) ==10908== by 0x804AAB7: MainWindow::FaddModul() (in /home/f_kissig/editor/bin/editor) ==10908== by 0x804C9B2: MainWindow::qt_metacall(QMetaObject::Call, int, void**) (in /home/f_kissig/editor/bin/editor) ==10908== by 0x1C1997E6: QMetaObject::activate(QObject*, int, int, void**) (in /usr/lib/libQtCore.so.4.1.0) ==10908== by 0x1C199A29: QMetaObject::activate(QObject*, QMetaObject const*, int, int, void**) (in /usr/lib/libQtCore.so.4.1.0) ==10908== by 0x1BD967ED: QAbstractButton::clicked(bool) (in /usr/lib/libQtGui.so.4.1.0) ==10908== by 0x1BC40CE6: QAbstractButtonPrivate::click() (in /usr/lib/libQtGui.so.4.1.0) ==10908== by 0x1BC40F1D: QAbstractButton::mouseReleaseEvent(QMouseEvent*) (in /usr/lib/libQtGui.so.4.1.0) ==10908== by 0x1BA7BFCC: QWidget::event(QEvent*) (in /usr/lib/libQtGui.so.4.1.0) ==10908== by 0x1BC413B2: QAbstractButton::event(QEvent*) (in /usr/lib/libQtGui.so.4.1.0) ==10908== by 0x1BA3B5D0: QApplicationPrivate::notify_helper(QObject*, QEvent*) (in /usr/lib/libQtGui.so.4.1.0) ==10908== Address 0x1AC838D is not stack'd, malloc'd or (recently) free'd ==10908== ==10908== Process terminating with default action of signal 11 (SIGSEGV)
-
Du solltest im Debugmodus kompilieren, um auch die Zeilennummern zu erhalten. Auch Qt solltest du zum Testen im Debugmodus vorhalten.
-
ups ... ich hätte auch noch ein bisschen mehr von der valgrind-Ausgabe posten sollen *g* sry ... dasmit dem Debug-Modus hab ich zwar nich hinbekommen, aber eigentlich weiß ich ja die Zeile ...
==8989== Process terminating with default action of signal 11 (SIGSEGV) ==8989== Access not within mapped region at address 0x1AC838D ==8989== at 0x804ABD8: QList<Modul*>::append(Modul* const&) (in /home/f_kissig/debug/debug) ==8989== by 0x804AB1E: Kernel::addModul(QString) (in /home/f_kissig/debug/debug) ==8989== by 0x804ADD7: MainWindow::FaddModul() (in /home/f_kissig/debug/debug)
komischerweise ist diese fehlerhafte Adresse (0x1AC838D) dieselbe ... (nich wundern is gleiches Programm nur neu woanders kompiliert ; ... wegen dem Pfad)
Kernel::Kernel() { modulliste = new QList<Modul*>; } void Kernel::addModul(QString Name) { modulliste->append(new Modul(Name)); }
nur was könnte daran falsch sein?? Das einzige was ich mir denken könnte ist das <Name> aus irgendeinem mysteriösen Grund ins Nirvana zeigt ...
-
Beim Kompilieren -g angeben und Qt mit -debug konfigurieren und kompilieren.
Ansonsten, wie wäre es mit einem kompletten kleinen Programm, das den gleichen Fehler hat?
-
So, also das mit dem Qt-debug hab ich nich hingekriegt *sry* aber mit -g... valgrindausgabe jetzt:
==8934== Use of uninitialised value of size 4 ==8934== at 0x804AB17: Kernel::addModul(QString) (kernel.cpp:35) ==8934== by 0x804ADD7: MainWindow::FaddModul() (mainwindow.cpp:176) ==8934== by 0x804C9B2: MainWindow::qt_metacall(QMetaObject::Call, int, void**) (moc_mainwindow.cpp:81) ==8934== by 0x1C1997E6: QMetaObject::activate(QObject*, int, int, void**) (in /usr/lib/libQtCore.so.4.1.0) ==8934== by 0x1C199A29: QMetaObject::activate(QObject*, QMetaObject const*, int, int, void**) (in /usr/lib/libQtCore.so.4.1.0) ==8934== by 0x1BD967ED: QAbstractButton::clicked(bool) (in /usr/lib/libQtGui.so.4.1.0) ==8934== by 0x1BC40CE6: QAbstractButtonPrivate::click() (in /usr/lib/libQtGui.so.4.1.0) ==8934== by 0x1BC40F1D: QAbstractButton::mouseReleaseEvent(QMouseEvent*) (in /usr/lib/libQtGui.so.4.1.0) ==8934== by 0x1BA7BFCC: QWidget::event(QEvent*) (in /usr/lib/libQtGui.so.4.1.0) ==8934== by 0x1BC413B2: QAbstractButton::event(QEvent*) (in /usr/lib/libQtGui.so.4.1.0) ==8934== by 0x1BA3B5D0: QApplicationPrivate::notify_helper(QObject*, QEvent*) (in /usr/lib/libQtGui.so.4.1.0) ==8934== by 0x1BA3D423: QApplication::notify(QObject*, QEvent*) (in /usr/lib/libQtGui.so.4.1.0) ==8934== ==8934== Invalid read of size 4 ==8934== at 0x804ABD8: QList<Modul*>::append(Modul* const&) (qlist.h:388) ==8934== by 0x804AB1E: Kernel::addModul(QString) (kernel.cpp:35) ==8934== by 0x804ADD7: MainWindow::FaddModul() (mainwindow.cpp:176) ==8934== by 0x804C9B2: MainWindow::qt_metacall(QMetaObject::Call, int, void**) (moc_mainwindow.cpp:81) ==8934== by 0x1C1997E6: QMetaObject::activate(QObject*, int, int, void**) (in /usr/lib/libQtCore.so.4.1.0) ==8934== by 0x1C199A29: QMetaObject::activate(QObject*, QMetaObject const*, int, int, void**) (in /usr/lib/libQtCore.so.4.1.0) ==8934== by 0x1BD967ED: QAbstractButton::clicked(bool) (in /usr/lib/libQtGui.so.4.1.0) ==8934== by 0x1BC40CE6: QAbstractButtonPrivate::click() (in /usr/lib/libQtGui.so.4.1.0) ==8934== by 0x1BC40F1D: QAbstractButton::mouseReleaseEvent(QMouseEvent*) (in /usr/lib/libQtGui.so.4.1.0) ==8934== by 0x1BA7BFCC: QWidget::event(QEvent*) (in /usr/lib/libQtGui.so.4.1.0) ==8934== by 0x1BC413B2: QAbstractButton::event(QEvent*) (in /usr/lib/libQtGui.so.4.1.0) ==8934== by 0x1BA3B5D0: QApplicationPrivate::notify_helper(QObject*, QEvent*) (in /usr/lib/libQtGui.so.4.1.0) ==8934== Address 0x1AC838D is not stack'd, malloc'd or (recently) free'd ==8934== ==8934== Process terminating with default action of signal 11 (SIGSEGV) ==8934== Access not within mapped region at address 0x1AC838D ==8934== at 0x804ABD8: QList<Modul*>::append(Modul* const&) (qlist.h:388) ==8934== by 0x804AB1E: Kernel::addModul(QString) (kernel.cpp:35) ==8934== by 0x804ADD7: MainWindow::FaddModul() (mainwindow.cpp:176) ==8934== by 0x804C9B2: MainWindow::qt_metacall(QMetaObject::Call, int, void**) (moc_mainwindow.cpp:81) ==8934== by 0x1C1997E6: QMetaObject::activate(QObject*, int, int, void**) (in /usr/lib/libQtCore.so.4.1.0) ==8934== by 0x1C199A29: QMetaObject::activate(QObject*, QMetaObject const*, int, int, void**) (in /usr/lib/libQtCore.so.4.1.0) ==8934== by 0x1BD967ED: QAbstractButton::clicked(bool) (in /usr/lib/libQtGui.so.4.1.0) ==8934== by 0x1BC40CE6: QAbstractButtonPrivate::click() (in /usr/lib/libQtGui.so.4.1.0) ==8934== by 0x1BC40F1D: QAbstractButton::mouseReleaseEvent(QMouseEvent*) (in /usr/lib/libQtGui.so.4.1.0) ==8934== by 0x1BA7BFCC: QWidget::event(QEvent*) (in /usr/lib/libQtGui.so.4.1.0) ==8934== by 0x1BC413B2: QAbstractButton::event(QEvent*) (in /usr/lib/libQtGui.so.4.1.0) ==8934== by 0x1BA3B5D0: QApplicationPrivate::notify_helper(QObject*, QEvent*) (in /usr/lib/libQtGui.so.4.1.0)
naja ich werd mich dann mal an ein minimales Problemprogramm setzen *g*
-
Neeeeeeeeeeeeeeeeein!!!
Ich habs doch gewusst 's is son Fehler der ganz billigen Sorte *duck*
Ich hab <Core> zwar deklariert aber nicht initialisiert ... ich verspreche sowas passiert nie wiedertrotzdem thx
Franz