#include "mainwindow.h" #include #include #include #include #include #include #include #include MainWindow *wnd; // Absturtz Handler zum speichern der Annotationen void segfault_sigaction(int signal, siginfo_t *si, void *arg) { if( wnd->getSequenz() ) { QMessageBox::StandardButton reply = QMessageBox::question(0, "Fehler", QString( "Es ist ein unerwarteter Fehler aufgetreten und das Programm muss " "geschlossen werden (Zugriffsfehler auf Speicheradresse " ) + QString("0x%1").arg((quintptr)si->si_addr, QT_POINTER_SIZE * 2, 16, QChar('0')) + "). Möchten sie die Annotationen speichern?", QMessageBox::Yes|QMessageBox::No); if (reply == QMessageBox::Yes) { wnd->getSequenz()->saveToPath( 0 ); } } exit(0); } void doStuff(int argc, char *argv[]) { QResource::registerResource("icons.rcc"); QApplication a(argc, argv); MainWindow w( &a ); wnd = &w; struct sigaction sa; memset(&sa, 0, sizeof(struct sigaction)); sigemptyset(&sa.sa_mask); sa.sa_sigaction = segfault_sigaction; sa.sa_flags = SA_SIGINFO; sigaction(SIGSEGV, &sa, 0); w.show(); a.exec(); } // Start des Programms int main(int argc, char *argv[]) { numObjects = 0; doStuff(argc, argv); qDebug() << "Number of counted memory leaks: " << numObjects; return 0; }