Instanz von einem Struct in verschiedenen Funktionen verwenden
-
Hi,
Also mein Problem ist, dass ich ein Struct habe und in einer Funktion eine Instanz dieses Structs erzeuge. also:
Struct InstanzVonStruct;
Nun möchte ich aber aus einer anderen Funktion auch auf diese Instanz zugreifen!
Aber meine Versuche schlagen immer fehl.mfg max
-
Wenn dir keiner hilft, dann erbarme ich mich halt.
Wenn du eine Variable in einer Funktion deklarierst, dann ist sie nur dort gültig, außerhalb der Funktion ist sie unbekannt.
-
wenn du sie nur so erzeugst, dann liegt sie auf dem stack und wird nach dem funktionsaufruf automatisch von dort "gelöscht". wenn du sie länger haben willst, musst du sie mit malloc auf dem heap erzeugen und wenn du sie nicht mehr brauchst mit free löschen.
-
ok, thx
Aber ich kenn ich nicht so gut aus beim programmieren.
sollte es dann so ausschauen?
in der main fkt:Struct InstanzVonStruct; InstanzVonStruct = malloc(Struct * sizeof(struct));
mfg max
-
mach doch die struct einfach global (ausserhalb von funktionen anlegen)
-
jaja die struct lege ich sowieso global an, nur das mit der Instanz funktioniert nicht.
-
madmax20031 schrieb:
ok, thx
Aber ich kenn ich nicht so gut aus beim programmieren.
sollte es dann so ausschauen?
in der main fkt:Struct InstanzVonStruct; InstanzVonStruct = malloc(Struct * sizeof(struct));
mfg max
struct flugzeug *airbus; airbus = malloc(sizeof(struct flugzeug));
So sollte es klappen.
Wobei du die Instanz auch einfach global machen könntest.
-
Eine weitere Möglichkeit wäre es, die lokale Variable static zu machen und dann ihre Adresse zurück zu geben:
Beispiel:
#include <stdio.h> #include <stdlib.h> int *omg(void) { static int i =32; return &i; } int main(void) { int *ptr; ptr = omg(); printf("%d\n",*ptr); return EXIT_SUCCESS; }
Wobei ich nicht weiß, wie schön das ist und ob man es machen sollte.
-
ok Danke!
-
madmax20031 schrieb:
jaja die struct lege ich sowieso global an, nur das mit der Instanz funktioniert nicht.
wenn du's anlegst, hast du auch gleich eine instanz.
struct mystruct // <-- bauplan { int member1; char member2; long undsoweiter; }; ... struct mystruct object; // <-- instanz