Debug Assertion Failed
-
Danke erstmal. Mir ist klar das ich das ganze mal einheitlich machen muss.
Möchte aber trotzdem verstehen warum dieser Fehler auftritt.bool fileexist(char *filename) { ifstream ifs(filename); if(ifs.is_open()){ return true; }else{ return false; } } andere Funktione: strcpy(strFileName, (iniResultDir + strFilenamePrefix + strDateiFileSuffix).c_str()); bool erg = fileexist(strFileName); if (erg == false) { sprintf(msg,"\tERROR: File %s doesn't exists...\n", strFileName); printf(msg); writeLog(msg); return false; } return true;Das Programm geht schief durch das return true. Ich möchte aber verstehen warum.
Auch wenn ich das Copy ändere und direkt zuweise geht es nicht.
-
Wenn du ganz genau wissen willst, warum ein Programm wo abbricht, dann gib uns auch vollständigen Code. Jedenfalls ist mit Sicherheit nicht das return true Schuld, sondern du wirst dir vorher mit deinen Aktionen den Stack zerschossen haben. Wo genau, dafür müsste man auch genau wissen, wie dein Programm aussieht.
-
Hier wäre der relevante Teil:
bool fileexist(char *filename) { ifstream ifs(filename); if(ifs.is_open()){ return true; }else{ return false; } } bool existsAllFiles (string strFilenamePrefix) { char strFileName[MAX_PATH]; FILE* fp; strcpy(strFileName, (iniSceneDir + strFilenamePrefix + strFirstFileSuffix).c_str()); fp = (FILE*)fopen(strFileName, "r"); if ( fp == (FILE*)NULL ) { sprintf(msg,"\tERROR: File %s doesn't exists...\n", strFileName); printf(msg); writeLog(msg); return false; } fclose(fp); strcpy(strFileName, (iniSceneDir + strFilenamePrefix + strSecondFileSuffix).c_str()); fp = (FILE*)fopen(strFileName, "r"); if ( fp == (FILE*)NULL ) { sprintf(msg,"\tERROR: File %s doesn't exists...\n", strFileName); printf(msg); writeLog(msg); return false; } fclose(fp); string str = strFilenamePrefix; string str2 = ".001."; str.replace(21,5,str2); strFilenamePrefix = str; strcpy(strFileName, (iniResultDir + strFilenamePrefix + strthirdFileSuffix).c_str()); ifstream ifs(strFileName); if(ifs.is_open()){ printf("file exists"); }else{ FILE* create; create = fopen(strFileName,"w"); sprintf(msg,"\tWARNING: Emty File %s is created...\n", strFileName); printf(msg); writeLog(msg); fclose(create); } strcpy(strFileName, (iniResultDir + strFilenamePrefix + strforthFileSuffix).c_str()); bool erg = fileexist(strFileName); if (erg == false) { sprintf(msg,"\tERROR: File %s doesn't exists...\n", strFileName); printf(msg); writeLog(msg); return false; } return true; }Ja der Stack kann natürlich zerschossen werden, aber warum.
Das Programm überprüft die verschiedenen Datei ob diese existieren.
-
Du willst offensichtlich gar nicht wissen, was das Problem ist. Warum fragst du dann noch?
-
Wie groß ist msg?
Aber bitte bitte bitte, schmeiss den Code weg und mach es ordentlich.
Da hast du zB eine Bibliothek für Filesystem Zugriff: http://www.boost.org/doc/libs/1_50_0/libs/filesystem/doc/index.htmUnd misch bitte bitte bitte nicht C und C++. Da kommt nur blödsinn raus.
-
Hallo,
ja ihr sagtet das ich ein mischmasch habe. Das ist mir klar.
Aber trotzdem möchte ich dennoch wissen warum es schief geht.
-
msg ist nur eine Ausgbae von
die habe ich auf char msg[255]
Grüße
-
campionissimo schrieb:
ja ihr sagtet das ich ein mischmasch habe. Das ist mir klar.
Aber trotzdem möchte ich dennoch wissen warum es schief geht.Stell dir einen Automechaniker vor. Jemand kommt mit einer selbstgebaute Kiste daher wo 100 millionen unterschiedliche Teile drin sind, sogar der Motor ist irgendwie aus anderen Teilen zusammengebaut.
Und der Automechaniker soll jetzt rausfinden warum das Auto manchmal nicht anspringt.
Die Lösung des Mechanikers ist: kauf dir ein ordentliches Auto.
Selbes hier.
uU ist msg mit 255 Zeichen zu kurz - je nachdem wie lange der Pfadname ist. uU ist writeLog fehlerhaft. Oder der Fehler liegt ganz woanders.
Das was du machen willst funktioniert so halt einfach nicht. Du musst den Code wegschmeissen und es richtig machen. Oder benutz einen Debugger und schau nach was genau den Fehler produziert.
-
das msg hab ich schon vergrößert. Ist nicht der Fehler.
Und debuggn geht auch nicht wirklich.
Hab die Namen überprüft. Der debugger geht genau bis zu return true und dann der assertion failed
expression stream != NULL
line 27.
Die line kann nicht der Grund sein, da hier die definition ist.
Keine ahnung, Möchte eigentlich nur wissen wo der Fehler auftritt. Auch wenn der code nicht gut ist da ich c und c++ mische
-
Shade Of Mine schrieb:
Stell dir einen Automechaniker vor. Jemand kommt mit einem Foto von einer selbstgebaute Kiste daher wo 100 millionen unterschiedliche Teile drin sind, sogar der Motor ist irgendwie aus anderen Teilen zusammengebaut.
FTFY
@Threadersteller: Zum dritten Mal: Wenn du genaue Antworten willst, dann zeig auch den kompletten Code. Zu deinen kurzen Ausschnitten kann man keine genauen Analysen geben.