[solved] QSqlDatabase & core dump
Verfasst: 19. Juli 2008 10:30
Hallo,
ich schreibe gerade ein neues Programm, das über eine kleine GUI (abgeleitet von QMainWindow) auf eine Mysql Datenbank zugreifen soll. Qt wird in Version 4.4 genutzt.
Im Code rufe ich in einer init-Methode folgende Methode auf:
Im closeEvent:
Wobei db eine Membervariable der GUI Klasse ist
Nun, die Verwendung klappt wunderbar. Ich bekomme meine TableModels gefüllt, es kommen keine Fehler usw.
Wenn ich das Programm nun beende, bekomme ich nen "Core Dump" bei Visual Studio. Er hängt im Desktruktor der GUI Klasse.
(Cobra ist der name der GUI Klasse).
Backtrace ist
In der main.cpp siehts so aus:
Wenn ich das db.close() im closeEvent weglasse, kommt kein Fehler. Was mache ich falsch? Habe im Code/GUI dann noch 2 TableViews mit entsprechendem SqlTableModel. Muss ich da beim abbauen/löschen irgendwas spezielles beachten?
ich schreibe gerade ein neues Programm, das über eine kleine GUI (abgeleitet von QMainWindow) auf eine Mysql Datenbank zugreifen soll. Qt wird in Version 4.4 genutzt.
Im Code rufe ich in einer init-Methode folgende Methode auf:
Code: Alles auswählen
db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName(dbHost);
db.setDatabaseName(dbName);
db.setUserName(dbUser);
db.setPassword(dbPass);
tell("Connecting to mysql database ...");
if (!db.open())
tell("Error: failed to connect to mysql database:\n" + db.lastError().text());Code: Alles auswählen
db.close();Wobei db eine Membervariable der GUI Klasse ist
Code: Alles auswählen
QSqlDatabase db;
Wenn ich das Programm nun beende, bekomme ich nen "Core Dump" bei Visual Studio. Er hängt im Desktruktor der GUI Klasse.
Code: Alles auswählen
- this 0x028d5a40 {data=??? } Cobra * const
[QWidget] CXX0033: Fehler: Fehler in OMF-Typinformationen
+ QMainWindow {...} QMainWindow
Backtrace ist
Code: Alles auswählen
QtCored4.dll!QAbstractItemModel::~QAbstractItemModel() Zeile 1193 + 0xf Bytes C++
QtCored4.dll!QAbstractTableModel::~QAbstractTableModel() Zeile 2459 + 0x8 Bytes C++
QtSqld4.dll!QSqlQueryModel::~QSqlQueryModel() Zeile 171 + 0x9 Bytes C++
QtSqld4.dll!QSqlTableModel::~QSqlTableModel() Zeile 351 + 0x8 Bytes C++
cobra.exe!QSqlTableModel::`scalar deleting destructor'() + 0x10 Bytes C++
QtCored4.dll!QObjectPrivate::deleteChildren() Zeile 1860 + 0x24 Bytes C++
QtGuid4.dll!QWidget::~QWidget() Zeile 1335 C++
QtGuid4.dll!QMainWindow::~QMainWindow() Zeile 329 + 0x22 Bytes C++
> cobra.exe!Cobra::~Cobra() Zeile 43 + 0xac Bytes C++
cobra.exe!Cobra::`scalar deleting destructor'() + 0xf Bytes C++
cobra.exe!main(int argc=1, char * * argv=0x02706eb0) Zeile 22 + 0x21 Bytes C++
cobra.exe!_WinMain@16() + 0x128 Bytes
cobra.exe!__tmainCRTStartup() Zeile 574 + 0x35 Bytes C
cobra.exe!WinMainCRTStartup() Zeile 399 C
kernel32.dll!76b3e3f3()
ntdll.dll!777ecfed()
ntdll.dll!777ed1ff()
Code: Alles auswählen
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Cobra* cobra = new Cobra;
if (cobra->atConfig() != 0)
{
delete cobra;
return 1;
}
cobra->init();
cobra->show();
app.exec();
delete cobra;
return 0;
}Wenn ich das db.close() im closeEvent weglasse, kommt kein Fehler. Was mache ich falsch? Habe im Code/GUI dann noch 2 TableViews mit entsprechendem SqlTableModel. Muss ich da beim abbauen/löschen irgendwas spezielles beachten?