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