C "Debug Assertion Failed" Error - Visual Studio 2013

Zerstoerer

Lieutenant
Registriert
Okt. 2010
Beiträge
685
Guten Abend zusammen,

ich bin gerade dabei eine kleine Funktion in C zu schreiben, die mehrere Dateien im CSV-Format einliest, und den Inhalt in eine XML Datei kopiert, bzw. auf die Verzeichnisstruktur anpasst. Nun habe ich den Code in Dev C++ geschrieben, und wollte ihn zwecks Zusammenführung zu Visual Studio exportieren.
In Dev C++ konnte ich den Code noch problemlos kompilieren, in Visual Studio erscheint leider ein Assertion Failed Error. Kann damit jemand was anfangen, bzw einen Fehler in meinem Code finden?

Code:
void einlesen(int anzahl, int idmeldung[]) {
	int i;
	FILE *xmlfile;
	char *xmlpath = (char*)calloc(1000, sizeof(char));
	char* fileid = (char*)calloc(1000, sizeof(char));
	char *pfad = calloc(1000, sizeof(char));
	char **paths = (char**)calloc(sizeof(idmeldung)+1, sizeof(char));
	for (i = 0; i <= sizeof(idmeldung); i++) {
		paths[i] = (char*)calloc(1000, sizeof(char));
	}
	for (i = 0; i <= sizeof(idmeldung); i++) {
		sprintf(fileid, "%d", idmeldung[i]);
		sprintf(pfad, "notifications\\Nachricht %d.csv", idmeldung[i]);
		strcpy(paths[i],pfad);
	}
	i = 1;
	sprintf(xmlpath,"nachricht\\Nachricht %d.xml",i);
	while(fopen(xmlpath,"r") != 0) {                    
        i++;
        sprintf(xmlpath,"nachricht\\Nachricht %d.xml",i);                     
    }
    xmlfile = fopen(xmlpath,"w");
    fprintf(xmlfile,"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n");
    fprintf(xmlfile,"<zeitungen>\n");
    for(i = 0; i <= sizeof(idmeldung);i++) {
          char *temp = (char*)calloc(1000, sizeof(char));
          int j = 0;
          FILE *filetemp = fopen(paths[i],"r");
          fgets(temp,50000,filetemp);
          fgets(temp,50000,filetemp);
          fprintf(xmlfile,temp);
          fgets(temp,50000,filetemp);
          fprintf(xmlfile,temp);
          fgets(temp,50000,filetemp);
          fprintf(xmlfile,temp);
          fgets(temp,50000,filetemp);
          fprintf(xmlfile,temp);
          fgets(temp,50000,filetemp);
          fprintf(xmlfile,temp);
          fgets(temp,50000,filetemp);
          fprintf(xmlfile,temp);
          fgets(temp,50000,filetemp);
          fprintf(xmlfile,temp);
          fgets(temp,50000,filetemp);
          fprintf(xmlfile,temp);
          fgets(temp,50000,filetemp);
          fprintf(xmlfile,temp);
          fclose(filetemp);
    }
    fprintf(xmlfile,"</zeitungen>\n");
    fclose(xmlfile);
}

Ich gebe meiner Funktion als Parameter ein dynamisches Array mit, das IDs für die zu öffnenden Dateien enthält. Damit kann ich auf existierende Dateien zugreifen bzw. mir den Namen herleiten. Der Integer anzahl beschreibt die Menge der gespeicherten IDs. Bisher läuft meine Funktion problemlos bis Zeile 23, dort crasht dann der Code.

Kann mir hier jemand helfen den Fehler zu finden und erklären, warum ich in der einen IDE den Code erfolgreich kompilieren kann, in der anderen jedoch nicht?

Wäre dankbar für ein paar Tipps.
 

Anhänge

  • Assertion Failed.png
    Assertion Failed.png
    16,7 KB · Aufrufe: 249
da str==null, wird er die datei mit fopen nicht öffnen können (falscher pfad durch debug lauf), einfach mal die settings für die debug konfig. prüfen
 
Aber warum läuft das problemlos in Dev C++. Dort wird schließlich kein Fehler aufgerufen.
 
Wie calav3ra_de schon sagte, wenn du die EXE direkt aus dem Visual Studio laufen läßt, ist das current working directory (auf das sich schließlich alle relativen Pfadangaben beziehen) nicht unbedingt da, wo du denkst.
 
Du meinst, wenn die exe in Visual Studio ausgeführt wird, bedeutet dies nicht, dass die exe im Debug Ordner von dem Projekt liegt? Sodass auch meine angelegten Ordner mit den Inhalten nicht gefunden werden, da die exe sich temporär woanders befindet?
 
Zerstoerer schrieb:
Du meinst, wenn die exe in Visual Studio ausgeführt wird, bedeutet dies nicht, dass die exe im Debug Ordner von dem Projekt liegt? Sodass auch meine angelegten Ordner mit den Inhalten nicht gefunden werden, da die exe sich temporär woanders befindet?

Nein.
 
Ok danke, ich habe nun die kompilierte Datei einmal ausgeführt, und siehe da sie funktioniert :D. Gibt es denn eine Möglichkeit dieses Verhalten zu ändern?
 
Zurück
Oben