[C] Probleme mit fwrite & fread

Yupa

Grünschnabel
Hallo,

Ich habe ein Problem beim schreiben und wieder einlesen von einer Struktur.
Die Struktur erzeuge ich folgendermaßen:

typedef double mx_real_t;
typedef mx_real_t *mx_vector_t;

mx_vector_t vec1 = mx_vector_create(3);
mx_vector_t vec2 = mx_vector_create(3);
...

mx_vector_t *container = (mx_vector_t*)calloc(2, sizeof(mx_vector_t*));
container[0] = vec1;
container[1] = vec2;
...

Nun will ich mir container, samt Inhalt auf Platte sichern und mache das so:

file = fopen("daten", "wb");
fwrite(container, sizeof(mx_vector_t), 5, file);
fclose(file);

Nach einem Neustart ,oder auch während das Programm läuft möchte ich die Daten wieder in container laden.
Zwischenzeitlich wird der Speicherplatz von container freigegeben.
Das laden erfolgt so:

file = fopen("daten", "rb");
fread(container, sizeof(mx_vector_t), 5, file);
fclose(file);

Leider steht nach dem laden von 'Daten' nur noch Schrott in container.
Dabei muss ich sagen das mx_vector_create(3) eine externe Funktion ist,
die aber nur eine etwas erweitertes calloc ausführt.
Auch nach mehrfachen rumprobieren habe ich meinen Fehler nicht gefunden, vielleicht könnte mir einer von euch helfen.

MfG Andre
 
container zeigt auf zwei Pointer auf deinen Datentyp mx_real_t. Du speicherst Pointer ab und lädst sie wieder, nicht die tatsächlichen Daten. Da kann nichts Sinnvolles bei rauskommen. Ich habe allerdings nur kurz drübergesehen, es kann sein, dass ich mich irre.
 
Danke erstmal, aber wie könnte ich den die Daten aus den Pointer dann raus bekommen?
Ich habe schon versucht container zu dereferenzieren. Auch mir jeden Vektor einzeln auszugeben und nacheinander mit fwrite zu speichern hat nichts gebracht.

Gruß Andre
 
Der zweite Ansatz ist besser. Du musst die Daten speichern, nicht die Pointer. Pointer haben in Dateien nichts zu suchen, da die Sachen, auf die sie zeigen, beim Einladen selten noch da sind, wo sie erwartet weden.
 
Zuletzt bearbeitet:
Hurra, ich habe einen Lösung gefunden!

Jeder der mal ein ähnliches Problem haben sollte, hier ist die Lösung:
Code:
    file = fopen("daten", "wb");
    for(j=0;j<5;j++){ 

    mx_vector_t vec = container[j];
    fwrite(vec, sizeof(mx_real_t), 3, file);
    }
    fclose(file);

So sichere ich meine Daten und mit:
Code:
    file = fopen("daten", "rb");
    for(k=0;k<5;k++){

	mx_vector_t vec = mx_vector_create(3);
	fread(vec, sizeof(mx_real_t), 3, file);
	container[k] = vec;

    }
   fclose(file);

lade ich sie wieder.
Also, nochmal danke für die Denkhilfe.

MfG Andre
 
Zurück