Hmm, okay. Warum's Abweichungen gibt, keine Ahnung
Zu den Arrays: Kommt drauf an, ob du einen Array aus VARs oder aus VAR-POINTERN willst. Normalerweise wenn man einen Array erstellen will nimmt man immer den Typ eines Elements (
z.B. 'var') und hängt noch ein
'*' an um daraus sozusagen eine indizierbare Liste aus den Elementen dieses Typs zu machen. (
'var' -> 'var*', 'STRING*' -> 'STRING**').
Strings objekte werden in Acknex generell schon als Pointer verwendet, deshalb wird daraus ein 'STRING**'. Wichtig: immer str_create() & str_remove()/ptr_remove() richtig verwenden!In deinem Beispiel erstellt die Funktion ein Array (
var**) bestehend aus var-pointern (
var*) (der Typ
'var*' im unteren Bereich passt nicht zu dem Rückgabewert der funktion
'var**'!). Falls du einen Array von var-objekten willst würdest du
'var * VarArray = sys_malloc(sizeof(var) * ArraySize);' verwenden (wie gerade beschrieben).
Aus Zufall würde dein Code oben auch mit dem Typ-Fehler funktionieren, weil in dem Fall (32bit Anwendung) ein Pointer genau die gleiche größe hat wie eine var. Also kann man ein
'var*' Array auch als
'var' Array "misbrauchen" (sollte man natürlich nicht).