Gültigkeit von Zeigern - Wann wird der Speicher freigegeben



  • Hallo,

    ich knabbere gerade an einer Verständnisfrage, auf die ich selbst in meinem C-Buch keine Antwort gefunden habe.

    Es geht um Zeiger, genauer gesagt Zeiger auf Strings deren Speicher NICHT mit malloc angefordert wurde, sondern die zur Laufzeit dynamisch erzeugt wurden, wie folgedes Beispiel:

    char *string = "Ein String";
    

    Nehmen wir an, ich habe eine Function funct(); in der dieser String erzeugt wird.

    int funct()
    {
       char *string = "Ein String";
    
       ...
    
       return 0;
    }
    

    Was passiert nun mit dem Speicherbereich, nachdem die Funktion durchlaufen wurde. Die restliche Applikation kennt diesen Speicherbereich ja nicht mehr,
    da kein gültiger Zeiger darauf mehr existiert.

    Liege ich damit richtig, dass nachdem die Funktion durchlaufen wurde, der Speicher beliebig überschrieben wird?

    Besteht dann überhaupt die Gefahr, dass sich der Speicher des Prozesses aufbläht (ein memory leak), wenn Funktion funct(); mehrmals aufgerufen wird?

    Vielen Dank schon mal!

    Grüße,

    Mark


  • Mod

    Ein Stringliteral wird nicht dynamisch erzeugt sondert initialisiert ein statisches Array aus char/wchar_t, das nicht modifiziert werden darf. Zudem dürfen diese Arrays, sofern sie geeigneten Inhalt haben, überlappen, es ist nicht spezifiziert, ob
    "aaa" == "aaa" wahr oder falsch ist, und der Compiler darf sich hier an unterschiedlichen Stellen des Programmes unterschiedlich verhalten.



  • MarkV schrieb:

    Besteht dann überhaupt die Gefahr, dass sich der Speicher des Prozesses aufbläht (ein memory leak), wenn Funktion funct(); mehrmals aufgerufen wird?

    nö, der pointer wird jedesmal neu mit der adresse des selben strings initialisiert. völlig harmlos also.
    🙂


Anmelden zum Antworten