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?


Anmelden zum Antworten