Arbeitsspeicher löschen!



  • 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?



  • guest80 schrieb:

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

    Du sollst free einen Zeiger geben. Um genau zu sein exakt den Zeiger, den malloc/realloc/calloc dir geliefert hat.

    Du uebergibst free aber keinen Zeiger und darueber beschwert sich dein compiler.

    kann es sein, dass dir grundlagen fehlen?



  • JA, du hast Recht, mir fehlen die Grundlagen ein bißchen. Du hast sie wohl draf ! Wie wäre es denn wenn ich dir meine Dateien schicke und du löst dieses kleine Problem?



  • Wie wäre es, wenn du dir die Grundlagen einfach aneignest ?

    http://pronix.de/modules/C/openbook/



  • guest80 schrieb:

    JA, du hast Recht, mir fehlen die Grundlagen ein bißchen. Du hast sie wohl draf ! Wie wäre es denn wenn ich dir meine Dateien schicke und du löst dieses kleine Problem?

    Eigentlich sollte die Antwort darauf sein:

    Wie wäre es, wenn ich dir erstmal meine Kontonummer und Bankleitzahl schicke?



  • Hat ja keinen Sinn, alles vorzukauen, dann bleibt der Aha- Effekt aus und keiner hat was gelernt.

    Mit den malloc()/free()- Hinweisen müßte Dir doch ausreichend gedient sein, guest80.

    Wenn Du am restlichen Pipifax verzweifelst, hilft nur lesen und probieren ... das kann Dir niemand abnehmen! 🕶


Anmelden zum Antworten