mysteriöser Programmabsturz beim Start
-
also neu starten bringt nichts (hatte den fehler schon einmal, da hab ich neu gestartet und noch ma probiert, klappte aber nicht, musste eine alte sicherung wiederherstellen).
danke für den tipp mit den objs. probiere das morgen mal aus, für heute hab ich die nase voll vom bcb

-
also, hab das mal probiert. gleicher fehler, gleiche stelle. da bleibt mir wohl nichts anderes übrig als das projekt neu zu erstellen.
-
ich weiß ja nich, was du alles schon probiert hast, aber vielleicht würdes was bringen im Menü Projekt->[Projektname] erzeugen zu machen. dabei wird das Projekt ganz neu compiliert.
-
alles schon probiert... ohne erfolg
-
sind die formulare auch in den projektoptionen als automatisch erzeugen eingetragen?
kannst du den fehler an nem kleineren testprojekt reproduzieren? wenn ja, dann poste mal den code.
-
leider kann ich das nicht reproduzieren.
aber der code ist:
dbmanage::Database::Database(std::string dbfilename,std::string indexfilename) : file(dbfilename) //<- Hier wird der CTor von std::string aufgerufen, da gibts den Speicherzugriffsfehler { //... }
-
naja,
strings nie per value uebergeben, sondern per referenz oder zeiger, sonst rufst du jedesmal den konstruktor von std-string auf. der reserviert jedes mal speicher und kopiert den uebergebenen string in den neuen, beim verlassen des konstruktors muss dann der temp. string noch freigegeben werden.
was ist file? was passiert wenn du schritt fuer schritt mit dem debugger durchlaeuft, wie sind die vars gesetzt? sind alle initialisiert?
-
Sunday schrieb:
naja,
strings nie per value uebergeben, sondern per referenz oder zeiger, sonst rufst du jedesmal den konstruktor von std-string auf. der reserviert jedes mal speicher und kopiert den uebergebenen string in den neuen, beim verlassen des konstruktors muss dann der temp. string noch freigegeben werden.
const std::string& funktioniert auch nicht besser
Sunday schrieb:
was ist file?
class dbmanage
{
//...
private:
std::string file;
std::ofstream db; //wird später mit file.c_str() als datei geöffnet
//...
};Sunday schrieb:
was passiert wenn du schritt fuer schritt mit dem debugger durchlaeuft,
Dann hört der debugger irgendwan bei den stl-headern auf, schrittweise durchzulaufen. da kann ich [Umschalt]+[F7] drücken wie ich will, es geht nicht weiter
Sunday schrieb:
wie sind die vars gesetzt? sind alle initialisiert?
was meinst du?
-
Ist deine Klasse in einer dll?
Übergib doch deine Strings mal als const char* und schau nach ob es immernoch abstürzt.
-
sorry, dass ich mich solange nicht gemeldet hatte...
also, die klasse steht in ner header-datei, die definition der methoden in einer cpp-datei, die vom compiler in eine .o gewandelt wird und dann mit den anderen units zusammengelinkt wird.
und was meinst du mit const char* übergeben? dann statt
//Jetzt std::string dbfilename; //so vielleicht? const char* dbfilename;bzw. statt
//Jetzt //Deklaration std::string file; //Konstruktor : file(dbfilename){/* ... */} //Destruktor überflüssig //So vielleicht? //Deklaration char* file; //Konstruktor file = new char[std::strlen(dbfilename)]; strcpy(file,dbfilename) //Destruktor delete file;schreiben, oder beides?
[EDIT 1+2]Fehler korrigiert[/EDIT 1+2]