free void pointer



  • Hallo,
    ich hätte da mal ne Frage:
    Kann der Inhalt eines Pointers vom Typ void ganz normal mit free(ptr) gelöscht werden, oder muss man ptr erst casten?



  • Der Parameter von free ist doch eh vom Typ void*, also brauchst du da AFAIK auch nichts zu casten. Oder was meinst du genau mit "Inhalt eines Pointers"?



  • Ok, Danke. Dann liegt der Grund des Memory Leaks wohl woanders... Morgen dann weitersuchen. 🙂



  • malloc speichert den pointer und die größe des allozierten speichers in einer tabelle. free schaut nach und bezieht daraus die information wieviel speicher freigegeben werden muss/kann (ok, in wirklichkeit macht das der kernel, aber das sei jetzt mal dahingestellt) :xmas1:



  • Außerdem, Speicher wird nicht gelöscht, sondern freigegeben, d.h. dem Pool wieder zur Benutzung gestellt und das ist ein sehr großer Unterschied.



  • sothis_ schrieb:

    malloc speichert den pointer und die größe des allozierten speichers in einer tabelle.

    eher in einer verkettetn liste.

    sothis_ schrieb:

    ok, in wirklichkeit macht das der kernel, aber das sei jetzt mal dahingestellt

    welchen kernel meinst du? bei windosen z.b. ist der kernel für das bereitstellen von grösseren speicherblöcken zuständig. das zerhexeln mit malloc usw. in kleinere schnipsel spielt sich im user-mode ab.
    🙂



  • ~fricky schrieb:

    eher in einer verkettetn liste.

    korinthenkacker :xmas1:

    ~fricky schrieb:

    welchen kernel meinst du? bei windosen z.b. ist der kernel für das bereitstellen von grösseren speicherblöcken zuständig. das zerhexeln mit malloc usw. in kleinere schnipsel spielt sich im user-mode ab.
    🙂

    bei linux, brk/mmap syscall

    edit: ich hatte es nicht so mit den quote tags 😛



  • Hallo,
    ich bin blutiger C Anfänger. Muss deswegen da nochmal nachfragen. Hab ich das richtig verstanden?
    - nur die Parameter für die über malloc/realloc Speicher angefordert wurde, müssen gefreed werden?
    - Also hard-coded-Values nicht?



  • C-Daniel schrieb:

    - nur die Parameter für die über malloc/realloc Speicher angefordert wurde, müssen gefreed werden?
    - Also hard-coded-Values nicht?

    das was malloc usw. zurückgegeben haben sollte am schluss ge-freed werden. z.b. so:

    char *p = malloc (...);
    ... // speicher benutzen und am schluss...
    free (p);
    

    🙂



  • C-Daniel schrieb:

    - Also hard-coded-Values nicht?

    wenn du damit lokale oder globale variablen meinst, dann ja. die werden auf dem stack gelegt (dessen größe aber nicht unbegrenzt ist, wird vom compiler vorgegeben, in der regel einige wenige megabyte). dieser speicher wird alloziert wenn entweder das programm gestartet wird (bei globalen variablen), oder die funktion (bzw. der anweisungsblock) aufgerufen wird. beim verlassen des programs/funktion/anweisungsbock wird der speicher automatisch wieder freigegeben :xmas1:



  • sothis_ schrieb:

    wenn du damit lokale oder globale variablen meinst, dann ja. die werden auf dem stack gelegt

    lokale veriablen u.ä. temporäres zeug schon, aber globale variablen stecken in einem (relativ dazu) statischen segment und sind nicht auf dem (selben) stack.

    sothis_ schrieb:

    in der regel einige wenige megabyte.

    naja, bei mir meistens wesentlich weniger als einige wenige megabytes
    🙂


Anmelden zum Antworten