Wann Speicher freigeben ?



  • Hallo !

    Mal nen paar dumme Fragen^^

    Wenn eine Variable in einer Funktion definiert wird und die Funktion endet, dann wird doch der Speicherbereich der Variable wieder freigegeben oder ?

    Wenn ich in der Funktion mit z.B. malloc(...) Speicher reserviere muss ich ihn aber definitiv wieder mit free(...) freigeben, egal ob er in einer Funktion reserviert wurde oder Global ?



  • Richtig. Für alle Variablen die du benutzt wird automatisch Speicher besorgt. Bei int i; wird für i Speicher besorgt. Bei int *pi; wird für pi Speicher besorgt. Wenn pi irgendwo hinzeigen soll musst du dir Speicher mit malloc besorgen und ihn nach Benutzung wieder freigeben.
    Sowas wie

    int *pi; //Speicher für pi kommt automatisch
    pi = malloc(sizeof(int)); //Speicher besorgen auf den pi zeigen soll
    //irgendwas sinnvolles mit pi machen
    free(pi);
    

    Bei Funktionen musst du etwas aufpassen. Wenn du das Obige in eine Funktion schreibst musst du free(pi) benutzen bevor die Funktion endet, da pi nach dem verlassen der Funktion automatisch freigegeben wird und du dann nicht mehr an den Wert von pi rankommst.


Anmelden zum Antworten