Pointer als Rückgabewert einer Funktion



  • Haloelite2 schrieb:

    Also in meinem Fall malloc benutzen?

    Ich habe nur an den Lerneffekt gedacht. 🙂

    Die calloc() Lösung funktioniert übrigens nur, wenn die 0 als float wirklich kein Bit gesetzt hat. Das ist wohl bei so ziemlich jedem System der Fall - aber 100% ist es nicht.
    Du kannst das natürlich testen...blabla... Aber warum?! Nimm malloc() und initialisier selber.

    #if __STDC_IEC_559__==1
    #define getCoordinateArray(x) calloc((x),sizeof(coordinate_t))
    #else
    coordinate_t *getCoordinateArray(int n) {
      coordinate_t *result = malloc(n*sizeof(coordinate_t));
      if(result)
        coordinate_init(result, n, 0.f, 0.f);
      return result;
    }
    #endif
    


  • Okay, diese Zeile verstehe ich nicht:

    f(result) 
        coordinate_init(result, n, 0.f, 0.f);
    


  • Haloelite2 schrieb:

    Okay, diese Zeile verstehe ich nicht:

    if(result) 
        coordinate_init(result, n, 0.f, 0.f);
    

    Na: das ist halt ein Aufruf von der Funktion, die ich Dir vorschlug, dass Du Sie noch implementierst.

    Und ich prüfe result vor dem Aufruf auf NULL - falls malloc() wirklich keinen Speicher klarmachen konnte.



  • Ich soll lediglich (Aufgabenstellung) die gegebene Funktion vervollständigen.
    Außerdem verstehe ich auch noch nicht, wie ich die Werte des array (Es ist doch keines deklariert) auf 0 setzen soll.
    Außerdem bekomme ich als Ausgabe ohnehin nur Nullen angezeigt, von daher sollte es schon mit 0 belegt sein, oder?



  • coordinate_t * getCoordinateArray (int n)
    {
      coordinate_t* p = malloc( n * sizeof(*p) );
    
      if( p!=NULL )
        while( n-- )
          p[n].x = p[n].y = 0;
    
      return p;
    }
    

    Und was war jetzt so schlimm daran?
    Du hast im Unterricht nicht aufgepasst (als malloc dran war) und auch sonst nicht.



  • Haloelite2 schrieb:

    Außerdem verstehe ich auch noch nicht, wie ich die Werte des array (Es ist doch keines deklariert) auf 0 setzen soll.

    Du bekommst von malloc eine Adresse auf einen Speicherbereich geliefert.
    Diesen Speicher kannst du wie ein Array benutzen.

    Da du die Größe während der Laufzeit des Programms festlegen kannst, läuft das unter dem Begriff Dynamischer Speicher.

    Haloelite2 schrieb:

    Außerdem bekomme ich als Ausgabe ohnehin nur Nullen angezeigt, von daher sollte es schon mit 0 belegt sein, oder?

    Nein. Das ist Zufall.



  • Haloelite2 schrieb:

    Ich soll lediglich (Aufgabenstellung) die gegebene Funktion vervollständigen.

    Dann wäre es natürlich schädlich noch ein oder zwei weitere Funktionen zu schreiben! 🤡
    Aber im Ernst: war nur zur Übung gedacht. Bekanntlich führen 1000 Wege nach Rom.



  • Das Problem ist nicht, dass ich nicht aufgepasst habe, sondern, dass wir erst eine Vorlesung hatten, in der malloc angeschnitte wurde.

    Aber danke für die Vorschläge und Beispiele. 🙂



  • haloelite2 schrieb:

    Aber danke für die Vorschläge und Beispiele. 🙂

    Jo! Gerne!
    Dies war - glaube ich - ein recht erquicklicher thread. 🙂



  • Da glaubst du richtig. 🙂


Anmelden zum Antworten