Zeiger speichern



  • Wie kann ich z. Bsp.

    folgenden Zeiger speichern?

    int *zahlen;

    Die Größe des Zeigers wird mit malloc bestimmt.
    Das Speichern und laden mit fwrite und fread funktioniert während der Laufzeit des Programms.
    Wenn ich das Programm jedoch neu starte funktioniert das laden nicht mehr, da wahrscheinleich die Größe von *zahlen nicht bekannt ist.

    Bin für jeden Tip dankbar.



  • Warum speicherst du nicht den Wert ? Den Pointer kannst du nicht speichern, weil bei jedem Start die Variable nen anderen Wert hat.



  • feigling schrieb:

    Warum speicherst du nicht den Wert ? Den Pointer kannst du nicht speichern, weil bei jedem Start die Variable nen anderen Wert hat.

    Ich denke das war gewollt.

    Also, mein Tip:
    Schreib zuerst die Groesse des Arrays in dein File und dann alle Werte im Array. Dann kannst du beim Einlesen analog vorgehen. Du liest zuerst die Groesse ein, legst dann ein neues Array der Groesse an und liest die Werte dann in dein Array. In Code:

    int len = 5;
    int *numbers = malloc( 5 * sizeof(int) );
    /* write */
    fwrite( &len, sizeof(int), 1, fout );
    fwrite( numbers, sizeof(int), 5, fout );
    
    /* read */
    int len2 = 0;
    int *numbers2 = NULL;
    fread( &len2, sizeof(int), 1, fin );
    numbers2 = malloc( len * sizeof(int) );
    fwrite( numbers2, sizeof(int), 5, fin );
    

    fin und fout musst halt vorher initialisieren.



  • Vielen Dank pli
    hast mir sehr geholfen.

    Weißt du vielleicht noch wie man eine Matrix speichern kann.
    Hat bei mir nicht funktioniert, da hab ich sie einfach in ein Array geschrieben und das Array gespeichert und geladen.
    Danach einfach wieder in eine Matrix zurück geschrieben.

    Gibt es vielleicht noch eine andere Möglichkeit?



  • Genauso wie bei Arrays nur hast du halt mehrere Grössen.
    Kurt



  • Eine Matrix ist ja nix anderes als viele Arrays hintereinander. Um die zu speichern kannst du das gleiche Prinzip verwenden. Du schreibst zuerst die Anzahl von Zeilen und Spalten (oder bei mehr als 2 Dimensionen schreibst du die einzelnen Dimensionsgroessen raus) in die Datei und danach eine Schleife die dir Zeile fuer Zeile in die Datei schreibt. Einlesen geht genauso.



  • for(int fetzS = 0; fetzS < SENKRECHT; fetzS++)
            for(int fetzW = 0; fetzW < WAAGRECHT; fetzW++)
                fprintf(x, "%d", matrix[fetzS][fetzW]);
    

    tja so koenntest das ungefaer machen...



  • --linuxuser-- schrieb:

    for(int fetzS = 0; fetzS < SENKRECHT; fetzS++)
            for(int fetzW = 0; fetzW < WAAGRECHT; fetzW++)
                fprintf(x, "%d", matrix[fetzS][fetzW]);
    

    tja so koenntest das ungefaer machen...

    Dann sollte man aber noch ein Trennzeichen einfuegen, denn wenn ich

    1 23
    4 5
    

    so ausgebe steht

    12345
    

    in der Datei und das kannst nachher nicht mehr eindeutig auseinander bauen. Also besser "%d " statt "%d".



  • pli schrieb:

    --linuxuser-- schrieb:

    for(int fetzS = 0; fetzS < SENKRECHT; fetzS++)
            for(int fetzW = 0; fetzW < WAAGRECHT; fetzW++)
                fprintf(x, "%d", matrix[fetzS][fetzW]);
    

    tja so koenntest das ungefaer machen...

    Dann sollte man aber noch ein Trennzeichen einfuegen, denn wenn ich

    1 23
    4 5
    

    so ausgebe steht

    12345
    

    in der Datei und das kannst nachher nicht mehr eindeutig auseinander bauen. Also besser "%d " statt "%d".

    da hast du schon recht waenn du es spaeter nicht wieder in dein programm einlaesen willst denn waenn du dies willst kannst es leichter programmieren waenn alles in einer wurscht steht dann kannst du dir n paar zeilen code sparen(weis ich aus eigener erfahrung 🙂 )


Anmelden zum Antworten