return von zeigern



  • an sich mach ichs mal ausführlicher

    class array
    {
        private:
            int *array;  //das element sool durch den member zurückgeliefert werden
    ...
    int get_array();
    
    int array::get_array()
    {
        return array;                      
    }
    

    mach ich jetzt über main:

    int *d = mat.get_array();
    

    dann gibts z.b. das:

    28  invalid conversion from `int' to `int*'
    

    und das private element wird ja nicht gelöscht... oben hab ich ein bissel müllig geschrieben



  • mach mal einen Stern hinter dein int bei array::get_array(), dann gehts.

    Wenn du die Adresse als Integerwert (boese, boese!) zurueckgeben willst, dann must halt noch nen cast zu int* machen.



  • Mathias schrieb:

    Nicht wirklich virtuell Realisticer, i ist nicht der Intwert sondern dessen Adresse und wird beim Verlassen der Funktion wie es sich gehört kopiert.
    🙂

    Noe, da wird nichts kopiert. Und ja, es ist die Adresse der lokalen Variablen,
    die du zurueckgibst und die ist ungueltig, wenn die Funktion verlassen wird.

    mfg
    v R



  • sodim schrieb:

    an sich mach ichs mal ausführlicher

    class array
    {
        private:
            int *array;  //das element sool durch den member zurückgeliefert werden
    ...
    int get_array();
    
    int array::get_array()
    {
        return array;                      
    }
    

    mach ich jetzt über main:

    int *d = mat.get_array();
    

    dann gibts z.b. das:

    28  invalid conversion from `int' to `int*'
    

    und das private element wird ja nicht gelöscht... oben hab ich ein bissel müllig geschrieben

    Diese Informationen hatten wir eben ja noch gar nicht 😉

    mfg
    v R



  • @ virtuell Realisticer
    Aha, also werden die Adressen bei der Beendigung der Funktion nicht kopiert. Stellt sich die Frage wie funktioniert die Uebergabe einer Adresse, die in einer Funktionsvariable steht?

    Würde mich schon interessieren...



  • Mathias schrieb:

    @ virtuell Realisticer
    Aha, also werden die Adressen bei der Beendigung der Funktion nicht kopiert. Stellt sich die Frage wie funktioniert die Uebergabe einer Adresse, die in einer Funktionsvariable steht?

    Würde mich schon interessieren...

    Die lokale Variable ist doch gar nicht mehr guelig. Natuerlich bekommst du die
    Adresse zurueck, aber du kannst nichts damit anfangen.

    Ich hab mich da falsch ausgedrueckt und in 2 aufeinanderfolgenden Saetzen auch
    noch selbst widersprochen, sry ;).

    mfg
    v R

    [edit]
    Wenn der Speicher dynamisch erzeugt worden ist, ist natuerlich auch die Adresse
    gueltig
    [/edit]



  • virtuell Realisticer schrieb:

    Mathias schrieb:

    ...
    Verweist du vielleicht in der Funktion auf ein lokale Variable, die beim Verlassen der Funktion gelöscht wird?

    Was ja im obigen Code der Fall waere 🙂

    Woran erkennst du, dass i zwischen Deklaration und return die Adresse einer lokalen Variable zugewiesen wird? 😕



  • Bashar schrieb:

    virtuell Realisticer schrieb:

    Mathias schrieb:

    ...
    Verweist du vielleicht in der Funktion auf ein lokale Variable, die beim Verlassen der Funktion gelöscht wird?

    Was ja im obigen Code der Fall waere 🙂

    Woran erkennst du, dass i zwischen Deklaration und return die Adresse einer lokalen Variable zugewiesen wird? 😕

    Ich habe nur den ersten code gesehen und dann

    get_i()
    

    und habe angenommen, dass der erste Code in get_i() steht. Und dann waere i
    lokal zu dieser Funktion.

    mfg
    v R



  • Wenn i also die betreffende lokale Variable ist, dann müsstest du schon return **&**i schreiben, um ihre Adresse zurückzugeben.



  • Bashar schrieb:

    Wenn i also die betreffende lokale Variable ist, dann müsstest du schon return **&**i schreiben, um ihre Adresse zurückzugeben.

    Ok, ich ging nicht von ihrer Adresse aus. Aber das haben wir ja jetzt
    geklaert 🙂

    mfg
    v R


Anmelden zum Antworten