Ja, das ist richtig. Mit der Array Deklaration wird auch gleich der Speicher bereitgestellt. Das Array "Player" ist ja statisch, da die Größe bereits zur Compilezeit bekannt ist. Die Funktion INIT_STRUCT tut nichts ausser Speicher zu allokieren und die Adresse des Speichers der lokalen Variablen Player zuzuweisen. Die globale Variable wird davon nicht verändert, denn die lokale Variable überdeckt sie. Nach dem Verlassen der Funktion ist der allokierte Speicher verloren. Im Prinzip ist INIT_STRUCT also eine Funktion, die ausschliesßlich ein Memory Leak "implementiert", um es mal positiv auszudrücken. Der Rest Deines Codes wird davon ja nicht betroffen.

malloc /sys_malloc / sys_nxalloc sind nur dann sinnvoll, wenn Du Dinge dynamische allokieren willst, weil Du zur Compilezeit noch nicht weisst, wieviel Speicher Du benötigen wirst. Ggf. ist der Einsatz von malloc und Konsorten noch sinnvoll um sicher zu stellen, das Variablen auf dem Heap und nicht im Stack allokiert werden. Das spielt für Deinen Fall hier aber keine Rolle.


Always learn from history, to be sure you make the same mistakes again...