Seite 1 von 1

Absturz bei Deklaration von QStandardItemModel

Verfasst: 2. Oktober 2010 02:16
von XL
Hallo allerseits,

ich habe ein Problem bei der Deklaration von QStandardItemModel (oder anderen Modellen). Sobald ich die Deklaration
QStandardItemModel *modelAnalysisCurves;
im Header meiner MainWindow-Klasse habe, kompiliert zwar alles fehlerfrei, aber die exe startet nicht, sondern liefert nur die nichtssagende Fehlermeldung "... hat ein Problem festgestellt und muss beendet werden." Wenn
QStandardItemModel *modelAnalysisCurves;
erst im Konstruktor von MainWindowFastScan steht, dann funktioniert alles. Ich hätte modelAnalysisCurve aber gerne klassenweit verfügbar.

Kann jemand helfen?
Ich bin für jeden Hinweis dankbar.

Code: Alles auswählen

#ifndef MAINWINDOWFASTSCAN_H
#define MAINWINDOWFASTSCAN_H

// ... noch mehr includes ...
#include <QStandardItemModel>

namespace Ui {
    class MainWindowFastScan;
}

class MainWindowFastScan : public QMainWindow
{
	Q_OBJECT

public:
	explicit MainWindowFastScan(QWidget *parent = 0);
	~MainWindowFastScan();
private:
	// ... noch mehr members ...
	QStandardItemModel *modelAnalysisCurves; // <- diese Zeile bringt die exe zum Absturz
};

#endif // MAINWINDOWFASTSCAN_H

Verfasst: 2. Oktober 2010 08:28
von upsala
Und was sagt der Debugger dazu?

Verfasst: 2. Oktober 2010 08:38
von franzf
Und wann/wie initialisierst du das model?

Verfasst: 2. Oktober 2010 21:01
von XL
Schönen Dank erstmal für's Antworten.

Debugger ... hm, kann ich erst übermorgen wieder testen.

Ich initialisiere gar nichts weiter, diese Zeile allein führt schon zum Absturz. Wenn sie an anderer Stelle steht, z.B. in MainWindowFastScan::MainWindowFastScan(QWidget *parent = 0), funktioniert allerdings alles ganz normal.

Verfasst: 2. Oktober 2010 22:02
von Christian81
Sorry aber das glauben wir Dir nicht. Also zeig uns ein minimales Beispiel...

Verfasst: 4. Oktober 2010 11:59
von XL
So, Rückmeldung von mir: Nachdem ihr mir Gewissheit verschafft habt, dass es eigentlich nicht allein an QStandardItemModel *modelAnalysisCurves; liegen kann und ein "(zu minimales) Minimalbeispiel" auch fehlerfrei läuft, ist die Erkenntnis nun folgende:

Ich habe noch eine eigene Klasse, sagen wir MyClass, die ich in MainWindowFastScan verwende.
Nun kommt es auf die Reihenfolge an:

Code: Alles auswählen

MyClass meineKlasse;
QStandardItemModel *modelAnalysisCurves;
stürzt ab, während

Code: Alles auswählen

QStandardItemModel *modelAnalysisCurves;
MyClass meineKlasse;
fehlerfrei läuft.

Das ist etwas unangenehm, weil ich nicht verstehe warum das so ist, aber immerhin habe ich erstmal eine Lösung. Sollte ich noch weitere Erkenntnisse erlangen und sie für interessant genug halten, dann poste ich wieder.

Ach ja, mit dem Debugger habe ich bisher quasi gar nicht gearbeitet und ich verstehe nicht ganz was er mir sagen will ... "The inferior stopped because it received a signal from the Operating System" ...

Verfasst: 4. Oktober 2010 12:16
von Christian81
MyClass macht irgendwas im Speicher - z.B. ein memset mit einem zu kleinen Speicherbereich oder ähnliches.

/Edit: Es kann auch sein dass es zwei MyClass - Header gibt und der eine etwas mehr Speicher 'anfordert' als der andere - d.h. ein und dieselbe Klasse nur unterschiedliche Members.

Verfasst: 4. Oktober 2010 18:26
von XL
Hm, danke für die Hinweise, wüsste jetzt aber gerade nicht wo das passieren sollte.
Vielleicht suche ich aber bei Gelegenheit und gebe dann evtl. bescheid.

Dafür hab ich nun eine neue grundsätzlichere Frage, siehe anderer Thread.

Verfasst: 4. Oktober 2010 18:31
von Christian81
valgrind is your friend ... :)

Verfasst: 6. Oktober 2010 11:28
von XL
Könnte valgrind auch unter Windows mein Freund sein?

Der Debugger hat doch noch dezente Hinweise gegeben wo ich grob suchen muss.
MyClass hat tatsächlich was im Speicher gemacht. Ein paar unsaubere Array-Grenzen.
Der Zusammenhang des Fehlers mit QStandardItemModel (bzw. der Reihenfolge der Anweisungen) war damit eher zufällig.

Problem ist also gelöst, danke für die Hinweise.

Verfasst: 6. Oktober 2010 12:22
von Christian81
Windows und valgrind sind keine Freunde :)
Array-Zugriff? Wir sind hier in C++ da gibts für sowas std- und auch Qt-Container...