Problem mit Zeigerübergabe von Funktion
-
Hallo!
Ich habe foldendes Problem:
Die erste printf Anweisung gibt das aus, was ich mir auch vorher erhofft habe, aber der zweite Block von printf´s gibt irgendetwas aus.
Benutze ich die Zeiger falsch???
Ich würde mich echt freuen, wenn mir jemand weiterhelfen kann.Danke
Borger.Der Code ist stark vereinfacht, um besser mein Problem darzustellen.
#include <stdlib.h> #include <stdio.h> #include <math.h> int* MyFunction(void); int main (void) { int *Ptr; Ptr = MyFunction(); printf("No1:%d No2:%d No3:%d\n\n",*Ptr, *(Ptr+1), *(Ptr+2)); printf("No1:%d\n",*Ptr); printf("no2:%d\n",*(Ptr+1)); printf("no3:%d\n",*(Ptr+2)); system("pause"); return 0; } int* MyFunction(void) { int ergebnis[3]; ergebnis[0] = 1; ergebnis[1] = 2; ergebnis[2] = 3; return ergebnis; }
-
Der zweite Block erstellt ja am Anfang das Array aus 3 integern.
Nur wird eben dieses Array am Ende des Blocks wieder freigegeben.Die zurückgelieferte Adresse zeigt also nach Abarbeitung von MyFunktion noch auf die selbe Stelle, allerdings gehört der Speicher nicht mehr dir. Du darfst also nicht mehr drauf lesen oder schreiben. Wenn du es doch tust, gibt es keine Garantie für Inhalt oder Verhalten.
Du könntest z.B.
static int ergebnis[3];
schreiben, dann bleibt der Speicher erhalten, auch wenn die Funktion verlassen wurde.
Noch besser wäre, das Array im main-Kontext zu erstellen und es als Adresse der MyFunktion zu übergeben. Diese Funktion füllt es dann lediglich mit den neuen Werten.
-
Jawoll, das ging schnell, vielen Dank!!!
Hast mir sehr weitergeholfen.Gruß Borger!