Progrmmabbruch



  • Ahoi!
    Ich habe ein Programm zur automatischen Logfileauswertung (*.xml) geschrieben.
    Es soll alle xml Datein in dem angegebenen Ordner nach einem Fehler durchsuchen und falls dieser erkannt wurde 4 Werte aus der Datei auslesen und in eine CSV Datei schreiben.
    Mit meinem Testverzeichnis (ca 50 Datein) funktioniert das Programm perfekt, wenn ich jedoch ein größeres Verzeichnis (>500 ca) benutze stürzt das Programm mit der Fehlerberichterstattungsmeldung abgebrochen.
    Die Meldung kommt jedoch bei jedem Verzeichnis bei unterschiedlichen Datein, in einem Verzeichnis komme ich bis zur Datei 530 und in einem anderen wieder bis 566...
    jedoch können sich bis zu 100000 Files in einem Verzeichnis befinden, da ich mich erst seit diesem Projekt wirklich mit C beschäftige weiß ich nicht ob ich irgend eine Buffergröße überschreite oder ob es noch weitere triviale Gründe für den Absturz gibt.

    Falls ihr meinen Code benötigt habe ich ihn hier mit meinen 2 Testverzeichnissen hochgeladen.
    http://rapidshare.com/files/136479000/Verzeichnisauslesen.rar.html



  • ^^lass es im debugger laufen. vielleicht hast du ein malloc/free-missverhältnis drin oder machst files nicht wieder zu.
    🙂



  • Also im Debugger bekomme ich die Meldung: Unbehandelte Ausnahme in Verzeichnisauslesen.exe: 0xc0000005: Access Violation.
    Mit dieser Meldung kann ich nicht viel anfangen.



  • Bragi schrieb:

    Also im Debugger bekomme ich die Meldung: Unbehandelte Ausnahme in Verzeichnisauslesen.exe: 0xc0000005: Access Violation.
    Mit dieser Meldung kann ich nicht viel anfangen.

    der debugger stoppt normalerweise das programm, wenn es rumzickt und zeigt dir die zeile im quellcode, in der der fehler passiert ist.
    🙂



  • Die markierte Zeile ist in diesem Codeausschnitt die 3te also die while-Schleife.
    Aber ich habe keine Ahnung wie ich diese Zeile ändern soll um das Programm zum Laufen zu bekommen.

    XML=fopen(argv[1], "r");
    
    while(feof(XML)==0)                                                                 
    {
    	fgets(string, 1024, XML);
    	if(strstr(string, wort)) 
    	{
    		CSV=fopen("C:\\temp\\SE_HDD\\ausgabe.csv", "a");
    		if(!CSV)
    		{
    			printf("Fehler beim Erstellen der CSV Datei!\n");
    		}
    		else
    		{
    			fclose(XML);
    
    			XML=fopen(argv[1], "r");
    
    			while(feof(XML)==0)
    			{
    				fgets(string, 1024, XML);
    
    				if((start = strstr(string, AOMAID_STAG)) && (end = strstr(string, AOMAID_ETAG)))
    				{
    					*end = '\0';
    					strcpy(AOMAID, start + strlen(AOMAID_STAG));
    				}
    
    				if((start = strstr(string, ID_STAG)) && (end = strstr(string, ID_ETAG)))
    				{
    					*end = '\0';
    					strcpy(ID, start + strlen(ID_STAG));
    				}
    
    				if((start = strstr(string, ERRORTYPE_STAG)) && (end = strstr(string, ERRORTYPE_ETAG)))
    				{
    					*end = '\0';
    					strcpy(Type, start + strlen(ERRORTYPE_STAG));
    				}
    
    				if((start = strstr(string, DESCRIPTION_STAG)) && (end = strstr(string, DESCRIPTION_ETAG)))
    				{
    					*end = '\0';
    					strcpy(Desc, start + strlen(ERRORTYPE_STAG) + 1);
    				}			
    			}
    
    			//printf("%s\n%s\n%s\n%s\n\n", AOMAID, ID, Type, Desc);
    
    			fprintf(CSV, "%s,%s,%s,%s\n", AOMAID, ID, Type, Desc);
    
    			//printf("CSV-Datei wurde erstellt/erweitert und auf C:\\temp\\SE_HDD abgelegt.\n\n");
    
    			fclose(XML);							
    			fclose(CSV);
    
    			break;
    		}
    	}	
    }
    


  • while (XML && feof(XML)==0)
    

    🙂



  • Juhui, danke dir, ohne dir wäre ich heute wahrscheinlich noch Stunden vor diesem Programm vergammelt 🙂
    Danke vielmals, es geht.


Anmelden zum Antworten