sqlite objekt als Klassenvariable - seg fault



  • Hallo,

    Ich versuche zur Zeit eine Datenbank-Klasse zu schreiben, die mir beim erstellen eines neuen Klassenobjektes eine Verbindung zu einer Sqlite3 datenbank öffnet und das handle für spätere queries speichert, um nicht für jeden query die datenbank neu zu öffnen. Ich versuche jetzt aus der Member-funktion "dbOpen" die sqlite3 db zu öffnen und das handle in der klassenvariable dbHandle abzulegen.

    class sqliteBackend
    {
        sqlite3* dbHandle;
        public:
            sqliteBackend();
            ~sqliteBackend();
            int dbOpen(string db_Path);
    };
    
    int sqliteBackend::dbOpen(string db_Path)
    {
        cout << "opening the db..." << endl;
        if(sqlite3_open(db_Path.c_str(),&dbHandle) != SQLITE_OK)
        {
            cout << "Error opening database: " << _dbFile << endl;
            return 1;
        }
        cout << "opened the db!" << endl;
    

    die Ausgabe sieht dann so aus:

    opening the db...
    Segmentation fault

    Ich binde die sqlite3.h von sqlite.org ein.

    Meine Vermutung ist, das ich bei der Klassendeklaration etwas falsch gemacht hab, bzw. falsch auf die Variable zugreife oder so. Leider konnte ich dem Problem bisher nicht näher kommen. dbHandle im Konstruktor mit NULL zu initialisieren ändert nichts.
    Ich hoffe jmd von euch hat eine Idee woran es liegen könnte. Ich weiß leider nicht, ob es ein problem von sqlite3 ist oder von meinem c++-code

    Gruß,
    Betagan



  • Wo kommt denn "_dbFile" her?

    Ich denke das daher dein Segfault kommt.

    BR
    Vinzenz



  • warum benutzt du nicht einen debugger//mem-checker?

    ein aufruf von z.B. valgrind und dein problem wäre wahrscheinlich gelöst ...



  • argh,

    ich hab in der wrapper klasse dadrüber nen Fehler gehabt... der gestalt dass ich im konstruktor nen objekt dieser sqliteBackend klasse erstellt hab, aber das nicht in der membervariable sondern in irgendwas anderem gespeichert hab.. beim aufruf einer funktion versucht der die membervariable zu nehmen.. wir kriegen undefined bevahour weil da na klar kein speicher zugewiesen wurde...

    hat sich damit erledigt, trotzdem danke!

    Gruß,
    Betagan

    PS: ich benutze normalerweise strace oder gdb, aber da bekam ich außer Memory leak nicht viel zu sehen.. valgrind sieht sehr geil aus, werd ich auf jedenfall mal ausprobieren.


Anmelden zum Antworten