Dies liegt im Einspeicher-Konzept begründet.
Durch die Art der Pointer-Definition (SPCPTR, SYSPTR) kann ich sowieso nur auf Variablen zugreifen, die per Basis SPCPTR definiert sind.
Ich kann auch seit V4 keine Pointerart mehr ändern was nun auch zu einem MCH-Fehler führt, sondern ich muss gezielt die Pointer-Befehle verwenden.
Wenn ich nun mal eine Variable "based(xyz)" deklariere bin ich selber für die korrekte Verarbeitung verantwortlich (war übrigens schon immer so).

Erst mit Windows-COM gibt es sowas eher selten, da es keinen Call by Reference mehr gibt, sondern alle Variablen über Kopien ausgetauscht werden. Wenn ich da allerdings auch drüber weggehe kommt es irgendwann und selten sofort zu abstürzen.

Bei Java ist das dann eher wie bei Basic. Ich habe z.B. den Variablentyp String, dessen Inhalt bei jeder Veränderung eine neue Adresse bekommt. Die Variable String selber enthält nur einen Verweis auf den aktuellen Speicher und ich kann String nur mit den zugelassenen Methoden verändern.
Rufe ich allerdings eine DLL auf kann das schon wieder platzen.

Das gleiche gilt auch für Array's, Variant usw.