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 alsfloat
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?! Nimmmalloc()
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 aufNULL
- fallsmalloc()
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.