Zeiger als Rückgabewert
-
Du wirst nicht umhin kommen, mit der Hilfsvariable zu arbeiten.
free() kannst du auch für NULL-Zeiger gefahrlos aufrufen.
Ob du überhaupt free() aufrufen musst, kann nur die Dokumentation zu deiner verwendeten Library sagen;
oftmals werden zwar Zeiger rückgegeben, die aber nur auf lokal-statischen Speicher zeigen, und den darfst du dann eben nicht mit free() aufrufen, sondern nur, wenn es dynamischer Speicher von malloc,calloc,realloc ist.
-
ok, danke für die tipps
-
Deine Funktion heißt myFunc und nicht *myFunc.
-
wie jetzt
myStruct *myFunc(bool crash)
das die Funktion einen zeiger zurückgibt ist quasi von der Lib gegeben
-
DirkB bezieht sich auf Deine Zeilen 28 und 29. Dir ist klar, dass das Sternchen dort nicht Teil des Funktionsnamens ist? Sondern dass du dadurch, dass du dort ein Sternchen schreibst, den zurück gegebenen Zeiger dereferenzierst?
Also dass
newStruct = *myFunc(false);
das gleiche ist wie
newStruct = * (myFunc(false));
oder mit Hilfsvariable:
myStruct newStruct; myStruct *hilfszeiger; hilfszeiger = myFunc(false); newStruct = *hilfszeiger;
Damit sollte dann wohl auch klar sein, wieso das abstürzt, wenn der Rückgabewert NULL ist.
Du benutzt übrigens einen C++-Compiler für deinen C-Quelltext. Tu das nicht! Die beiden Sprachen sind trotz historischer Ähnlichkeiten zu verschieden, als dass man diese Unterschiede ignorieren könnte, wenn es über einfachste Beispielprogramme hinaus geht.
-
die Dereferenzierung war mir hier bewusst. In meinem eigentlichen Quellcode war mir das nicht bewusst (zumindest die Tatsache dass die Rückgabe auch NULL sein konnte). Erst ein Absturz hat mich beim Testen darauf aufmerksam gemacht. Ich mag keine Zeiger
Woher hast du den C/C++ unterschied erkannt? Weil ich 'calloc' statt 'new' verwendet habe? Ich muss scheinbar noch viel lernen
-
SBond schrieb:
Woher hast du den C/C++ unterschied erkannt? Weil ich 'calloc' statt 'new' verwendet habe? Ich muss scheinbar noch viel lernen
#include <iostream> <-- das ist kein C, der Rest vom Programm aber schon.
-
ja ich bin leider noch ein C++ Anfänger
Mit AutoIt und PureBasic war die Welt noch so einfach
...nur leider kein OOP. naja ^^
-
Zeiger sind in erster Linie C
-> Literaturtip:
-
Dieser Thread wurde von Moderator/in nachtfeuer aus dem Forum Rund um die Programmierung in das Forum C (alle ISO-Standards) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
420815 schrieb:
SBond schrieb:
Woher hast du den C/C++ unterschied erkannt? Weil ich 'calloc' statt 'new' verwendet habe? Ich muss scheinbar noch viel lernen
#include <iostream> <-- das ist kein C, der Rest vom Programm aber schon.
Das war nur der Beweis. Da sind noch mehr C++-Features, die aber in späteren C-Standard übernommen wurden (beispielsweise der Name des structs). Ich habe bloß nicht den Eindruck, dass der Threadersteller irgendwelche höheren C-Standards in seinem Compiler aktiviert hat.