Verständnisfrage char * als Rückgabewert einer Funktion



  • Hallo,

    ich arbeite gerade zum ersten mal mit "Strings" in C.
    Verstehe ich folgenden Code richtig:

    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    char *generateString( void )
     {
            char string[] = "Ob ich hier wohl reinpasse?";
            char *tmp_ptr = malloc( strlen(string)+1 );
            if(tmp_ptr != 0) strcpy(tmp_ptr, string);
            return tmp_ptr;
     }
    void deleteString(char *tmp_ptr)
    {
            free( tmp_ptr );
    }
    
    int main( void )
    {
        printf("in der main\n");
        char *p_string = generateString();
        if(p_string != 0)
        printf ("%s\n", p_string);
        printf("%d", strlen(p_string));
        deleteString( p_string );
        getche();
        return 0;
    }
    

    - in der Funktion generateString() wird für den Zeiger char *tmp_ptr Speicher mit der Größe von String + 1 auf dem Heap alloziert. Anschließend wird string[] in den gerade allozierten Speicherbereicht des *tmp_ptr kopiert. Jetzt wird noch die Andresse von *tmp_ptr zurück an die main() Funktion übergeben. Nach beenden einer Funktion wird ja nomalerweise der Speicher wieder freigeben, dass ist aber hier nicht der Fall da wir Speicher auf dem Heap alloziert haben?

    - die zurück gegebene Adresse wird jetzt in der main() in dem Zeiger *p_string gespeichert. Nun wird getestet ob eine Adrese zurück gegeben wurden mit Hilfe von p_string != 0. Und zum Schluss wird noch die Adresse von *p_string noch der Funktion deleteString() übergeben welche den auf dem Heap reservierten Speicher mit free() wieder freigibt

    Stimmt das alles so weit?

    Schon mal vielen Dank fürs durchlesen und die Antworten.

    Viele Grüße
    Slayer



  • ~Slayer schrieb:

    Nach beenden einer Funktion wird ja nomalerweise der Speicher wieder freigeben, dass ist aber hier nicht der Fall da wir Speicher auf dem Heap alloziert haben?

    Ja, alles was du mit malloc allozierst, existiert solange, bis du free aufrufst. Vergisst du das, gibt's übrigens ein Speicherleck.

    EDIT: Der Rest stimmt quasi auch.



  • Ok, vielen Dank für die schnell Antwort.
    Wenn ich nochmal eine Frage zu C hab meld ich mich wieder 😉


Log in to reply