Arbeitsspeicher löschen!



  • Hallo,

    wie kann ich den Arbeitsspeicher löschen? Welche Funktion ist dafür zuständig?



  • Den Ganzen Arbeitsspeicher ? 😃
    mfg



  • Ja, ich lege Adressen in eine Struktur ab, lade dan eine Datei wo die selben Adressen stehen. Ich möchte den Arbeitsspeicher vor dem Laden der Datei löschen, damit die Adressen nicht doppelt drin stehen.



  • Äh, free ? O_o
    Deine Frage macht nicht wirklich viel sinn .. Du solltest mal ein bissle ausführlicher erklären, was du willst.



  • 1)Ich lege Adrssen an (z.B. 5 Adressen)
    2)Ich speichere diese Adressen in eine Datei auf der Festplatte ab. Nun habe ich die Adressen im Arbeitsspeicher und auf der Datei.
    3)Ich mache die Datei auf. Nun habe ich alle Adressen doppelt im Arbeitsspeicher. Ich möchte vor dem öffnen der Datei alle Adressen im Arbeitsspeicher löschen. Wie ?



  • feigling schrieb:

    Äh, free ? O_o
    Deine Frage macht nicht wirklich viel sinn .. Du solltest mal ein bissle ausführlicher erklären, was du willst.

    Mit free wird nicht wirklich gelöscht 🙄



  • interpreter schrieb:

    feigling schrieb:

    Äh, free ? O_o
    Deine Frage macht nicht wirklich viel sinn .. Du solltest mal ein bissle ausführlicher erklären, was du willst.

    Mit free wird nicht wirklich gelöscht 🙄

    Sondern ?
    Mir ist schon klar, dass free nur den Speicher freigibt...
    Trotzdem ist "free" die vernünftigste Antwort, die man auf solche Fragen geben kann, wenn weder Src gepostet wird nur ausgeführt wird, was "ich habe was im Speicher" bedeutet 😛



  • guest80 schrieb:

    3)Ich mache die Datei auf. Nun habe ich alle Adressen doppelt im Arbeitsspeicher.

    Ach ja? Woher hast du diese Erkenntnis?

    guest80 schrieb:

    Ich möchte vor dem öffnen der Datei alle Adressen im Arbeitsspeicher löschen. Wie ?

    Anstatt nach dem wie zu fragen, solltest du dir mal über das warum Gedanken machen. 😉



  • Wollt ihr mir helfen oder nur dumme Bemerkungen abgeben?



  • feigling schrieb:

    wenn weder Src gepostet wird nur ausgeführt wird, was "ich habe was im Speicher" bedeutet

    Soll ich es noch deutlicher schreiben ?
    Poste den Code und sag, was "ich habe was im Speicher" bedeutet 😨
    Deine Angaben sind ungenau.



  • guest80 schrieb:

    Wollt ihr mir helfen oder nur dumme Bemerkungen abgeben?

    willst du vernünftig fragen oder trollen?

    es gibt 2 möglichkeiten:

    1. du verwendest dynamisch allokierten speicher.
      der ist per malloc oder ähnlichem allokiert
      dann musst du free oder ähnliches machen

    2. du hast die daten auf dem stack, dann sind sie weg, sobald der scope verlassen ist.

    also stell bitte deine frage ordentlich.



  • Der Code ist viel zu lang.

    Ich erkläre es nocheinmal:

    Ich habe 5 Funktionen in meinem Programm

    In der ersten Funktion lege ich Adressen in eine Struktur an.
    In einer anderen Funktion speichere ich die gesamten Adressen blockweise mit
    fprintf in eine Datei auf der Festplatte ab. In der letzten Funktion lade ich diese DAtei mit dem gesamten Inhalt.
    Da ich aber zwischendurch meinen Arbeitsspeicher nicht leere, habe ich alle Adressen doppelt, nachdem ich die Datei öffne. Es gibt doch bestimmt eine einfache Funktion, mit der man den Arbeitsspeicher löschen kann?



  • Ich verwende dynamisch allokierten Speicher:

    struct ListEl *neu
    neu = (struct ListEl 😉 malloc(sizeof(struct ListEl));



  • Also wenn 5 Funktionen VIEL zu lang zum posten sind, solltest du viellecht einmal dein Design überdenken. 😉



  • guest80 schrieb:

    Ich verwende dynamisch allokierten Speicher:

    struct ListEl *neu
    neu = (struct ListEl 😉 malloc(sizeof(struct ListEl));

    Damit wären wir wieder bei meinem ersten Post -> free(ptr);



  • guest80 schrieb:

    Es gibt doch bestimmt eine einfache Funktion, mit der man den Arbeitsspeicher löschen kann?

    Nicht mehr benötigter Speicher wird mit free() freigegeben. Wurde hier aber schon gesagt.

    edit:
    aarrgh, zu spät



  • OK.

    In meinem Fall muss ich doch free(neu) machen, oder? Das klappt nicht so ganz, mein Programm stürzt ab!



  • Was sagt den der Debugger? Den schon mal benutzt? Und "das klappt nicht so ganz" ist auch nicht die beste Problembeschreibung...;)



  • @guest80
    Es versteht sich, dass du nach dem free() auch wieder mit malloc() bzw. realloc() speicher reservieren musst, wenn du wieder was speichern willst.

    ...
    //Speicher reservieren
    adressen = malloc(anz_adressen * (struct st_adresse));
    ...
    //Adressen eingeben und in Datei speichern
    ...
    free(adressen);
    ...
    adressen = malloc(anz_adressen_in_datei * (struct st_adresse));
    ...
    //Adressen aus Datei laden
    ...
    


  • Mein Code:

    struct ListEl *neu;
    
    neu = (struct ListEl *) malloc(sizeof(struct ListEl));//
    

    Hier reserviere ich Speicher um Adressen anzulegen.

    Dann soll ich laut AJ folgendes machen

    free(neu);
    
    neu = (struct ListEl *) malloc(sizeof(struct ListEl));//
    

    Der Compiler bringt ein Fehler:

    "Konvertierung von ListEl in void* nicht möglich"

    Der Prototyp von free ist ja

    void free(void*)
    

    !

    Wie kann ich das lösen?


Anmelden zum Antworten