Pointer Rückgabewert und Parameter Austausch zwischen mehreren Dateien
-
Hallo Allerseits!
Der Code sollte das Problem das ich hab verdeutlichen:
pointer.c
_______________float* pointerRückgabe(){
float* pointer = NULL;
float array[...][...] = Werte initilisieren...
....
pointer = array;
return pointer;
}
____________________In dieser Methode kann ich den Pointer problemlos dereferenzieren z.B. mit:
for(i=0....)
printf("%f", *(pointer+i));Sobald ich aber der rückgabewert nutze geht die nur teilweise:
main.c
__________________
float* pointerRückgabe();int main(){
...
float *pointerMain = NULL;
...
pointerMain = pointerRückgabe();
...
}
_____________________
dann kann ich nur eine bestimmte Anzahl von Werten(z.B bei 4 = 2 oder 14 = 5)
korrekt dereferenzieren mit:for(i=0....)
printf("%f", *(pointerMain+i));Das ich alle Werte korrekt erhalte funktioniert nur so, aber auch nur einmal:
printf("%f ; %f ; %f ; ..." ,*(pointerMain), *(pointerMain+1), *(pointerMain+2),....);
also sobald er einmal dereferenziert verliert er scheinbar seine Adresse.
Schlimm wird es erst wenn ich ihn dann nochmal per parameter übergeben möchte
main.c
__________________
float* pointerRückgabe();
void pointerParameter(float*);int main(){
...
float *pointerMain = NULL;
...
pointerMain = pointerRückgabe();
pointer parameter(pointerMain);
...
}Dann krieg ich nur ein korrekten Wert (den letzten bei einer länge Arraylänge von 14):
pointerparameter.c
__________________________void pointerParameter(float* prm){
....
prinf("%f", *(prm+13));
}
____________________________vielleicht ist es auch nur zufall dass dieser Wert stimmt!
Hab ich einen Denkfehler und Pointer funktkionieren nicht so?
Danke!
-
Juno schrieb:
float* pointer = NULL;
float array[...][...] = Werte initilisieren...
....
pointer = array;
return pointer;
}Du gibst die Addresse eines lokalen Array zurück
und da dieser lokale Array nur während der Laufzeit
der Funktion auf dem Stack liegt, ist er nach Aufruf
der Funktion nicht mehr verfügbar (= kann durch
beliebige andere Werte überschrieben werden)
-
Danke für deine Antwort!
Wie sollte ein mögliche lösung aussehen da ich ja nicht das Array zurückliefern kann.
-
Juno schrieb:
Danke für deine Antwort!
Wie sollte ein mögliche lösung aussehen da ich ja nicht das Array zurückliefern kann.Indem du es in den Heap legst (innerhalb der Funktion
mit malloc oder calloc allozieren), dann existiert es
auch noch nach der Beendigung der Funktion.
-
Vielen Dank!
Hatte immer nur versucht den Pointer zu allokieren, versuch es gleich mal mit dem Array.
-
Geht das Überhaupt das Array zu allokieren?
Denn wenn ich den pointer auf den Heap lege(hoffentlich so richtig):
pointer = calloc(ArrayLänge,sizeof(float));
geht es nicht?