Referenz einer Variable



  • Hallo,
    ich habe ein kleines Verständnisproblem bei der Übergabe von Referenzen. Ich deklariere ein "char a;" und rufe eine Methode auf, die so aussieht:
    "void testeVariable(*character);"

    Der Aufruf klappt ja so: testVariable(&a); aber was passiert, wenn ich in der Methode nun Speicher reservieren muss um ihn auf *a zu zuweisen? Wer ist für das löschen des Speichers verantwortlich? Eigentlich ja die Methode, oder? Weil diese ja mit new Speicher reserviert hat, aber das würde bedeuten, dass nach der Methode a keinen gültigen Wert mehr besitzt? Demnach müsste also eine Stelle a löschen, die den Speicher nicht reserviert hat?



  • Hi.

    Ich verstehe jetzt nicht ganz, was du meinst, aber du musst, wenn du eine Adresse übergibst keinen Speicher anfordern. Der ist ja bereits angefordert worden und zeigt auf einen gültigen Bereich.
    Wenn du was anderes meinst, dann zeig das bitte anhand eines Stückchen Code.

    void testeVariable(char *character)
    {
     std::cout << *character << std::endl; // a wird ausgegeben.
    }
    
    ...
    
    char a = '2'; //Variable a wird erzeugt
    testeVariable (&a); //Adresse wird übergeben
    

    Aber wenn du Speicher anforderst (per new), dann musst DU ihn wieder freigeben. WO spielt eigentlich keine Rolle. Da die Gültigkeit unbeschränkt ist. Das heisst, dass der Speicher, den du mittels new anfoderst so lange da ist, bis DU ihn freigibst. Das heisst, dass der Speicher theoretisch auch noch da wäre, wenn du das Programm beendest, das wird jedoch vom OS bereinigt. Darauf sollte man sich aber nicht verlassen und gar nicht erst so weit kommen lassen.


Anmelden zum Antworten