... hier muss man (mindestens) 2 Dinge voneinander unterscheiden:

Eine Variable mit based Deklaration wird vom Compiler ohne Speicher angelegt, wenn dem based Pointer zur Compiletime kein statischer Wert zugewiesen werden kann. Wird sowas dann zur Laufzeit referenziert, merkt die runtime das, und motzt.

Habe ich dem based Pointer einen Wert zugewiesen (über alloc, %addr, oder sowas) kann ich die Variable bedienen. Dynamische Speicher Allokierung ist keine (in Worten: k e i n e !) Stärke der RPG Runtime Umgebungen, so ein Pointer auf der AS/400 weiß nicht auf was er da zeigt und das ist ihm auch Wurscht. Die entsprechenden Prüfungen sind lückenhaft, wie ein Käse, als man den Kühen noch keine Antibiotika gab. Adressiere ich Phantasiewerte für den Pointer, durch Rechenfehler, Verwendung von mehr Elementen des Arrays als es hat... könnte es knallen, muss aber nicht, wenn man Pech hat, dann überklopft ein neuer alloc möglicherweise irgendwas und wenn da dann ein anderer Pointer stand, dann gehts richtig in den Wald - auf Windows nennt man das dann Bluescreen, auf AS/400 WebSphere.

Aufpassen muss man natürlich zusätzlich noch an anderen Stellen, wie Pointer Alignment, korrekte Freigabe von Speicher etc. - es sei denn, man verwendet eine fertige Komponente, da gibt es auf meiner Freeware Seite eine HashTable und einen Vector, bei Mihael (RPGNEXTGEN.COM) einen Vector, eine linked list und weiteres, Thomas (tools400.de) hat sowas wahrscheinlich auch Open Source und Google findet wohl noch mehr.

D*B