Probleme mit fclose



  • Hallo allerseits,

    ich habe bei einer Funktion, welche Positionen in eine Datei schreiben soll Probleme mit dem Befehl fclose. Das Programm sieht in etwa so aus:

    void trajectory (struct mol_prop mol[], int abfrage, char anhang_trj[], int N)
    {
    
    	if ( (f_writetrj = fopen(anhang_trj, "a")) == NULL)
    		{
    		fprintf(stderr, "Fehler beim Öffnen oder Erstellen der Datei %s.\n", anhang_trj);
    		exit(1);
    		}
    
    		if (abfrage == 1)//Erster Durchlauf 1=ja, 0 = nein
    			{/***** HEADER der Ausgabedatei ***********/
    			fprintf(f_writetrj, "##############################\n");
    			fprintf(f_writetrj, "#Trajectory-File\n");		
    			fprintf(f_writetrj, "##############################\n\n\n");
    			fprintf(f_writetrj, "atom 0:%d      radius 0.8 name He\n\n",N-1);
    			fprintf(f_writetrj, "timestep\n");
    			fprintf(f_writetrj, "pbc 10.0 10.0 10.0\n");
    			}
    
    		else 
    			fprintf(f_writetrj, "\ntimestep\n");
    
    	for ( n = 0; n< N; n ++)
    	{
    
    		fprintf(f_writetrj, "%.10lf \t %.10lf \t %.10lf \n", mol[n].x, mol[n].y, mol[n].z);			
    	}
    		fclose(f_writetrj);
    
    }
    

    Diese Funktion wird im Programm an zwei verschiedenen Stellen eingesetzt. Einmal am Anfang, um die Anfangspositionen auszugeben und einmal in jeder Schleife.
    Wenn ich diese Funktion laufen lasse, bekomme ich einen Segmentation fault. Kommentiere ich die fclose-Zeile aus, verschwindet dieser. Allerdings werden in meinem File dann die Positionen umgekehrt ausgegeben, also der letzte Schritt oben, der erste ganz unten.
    Es macht auch keinen Unterschied an welcher Stelle die Funktion eingesetzt wird. Der Fehler tritt an beiden Stellen auf.

    Setze ich das fclose hier irgendwie an der falschen Stelle ein oder was läuft hier falsch?

    Danke schonmal für Hilfe.

    Grüße

    Timo



  • Code sieht unverdächtig aus. Wahrscheinlich schreibst du schon vor dem Funktionsaufruf auf Speicher, den du besser nicht beschreiben solltest 🙂


Anmelden zum Antworten