nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4688 Wohnort: ~/
|
Verfasst am: 12.08.2022, 00:51 Titel: Compiler erkennt falschen Datentyp nicht? |
|
|
Ich zerbreche mir seit einem halben Tag den Kopf an einem hartnäckigen, nicht erkennbaren Problem, das mir immer wieder Speicherzugriffsfehler erzeugt, bis ich endlich die Ursache finde. Ich habe es mal auf ein Minimum reduziert:
Code: | type Typ_A
as ubyte aufbau, nicht, so, wichtig
end type
type Typ_B
as string nur, zur, demonstration
end type
declare sub unterprogramm_1
declare sub unterprogramm_2(array() as Typ_B)
sub unterprogramm_1
redim as Typ_A array(10)
unterprogramm_2 array() ' FALSCHER DATENTYP!
end sub
sub unterprogramm_2(array() as Typ_B)
redim preserve array(20)
end sub
unterprogramm_1 |
Dass die Redimensionierung eines Arrays falschen Typs für Probleme sorgen kann, scheint mir offensichtlich - aber warum zum Kuckuck compiliert fbc das, anstatt den falschen Datentyp zu monieren? Ist das bei Arrays in Unterprogrammen "normal"?
Mit primitiven Datentypen (INTEGER-Array o. ä.) funktioniert es übrigens nicht; so herum compiliert es aber ebenfalls:
Code: | type Typ_A
as ubyte aufbau, nicht, so, wichtig
end type
type Typ_B
as string nur, zur, demonstration
end type
declare sub unterprogramm_1(array() as Typ_A)
declare sub unterprogramm_2(array() as Typ_B)
sub unterprogramm_1(array() as Typ_A)
unterprogramm_2 array()
end sub
sub unterprogramm_2(array() as Typ_B)
redim preserve array(20)
end sub
redim as Typ_A array(10)
unterprogramm_1(array()) |
_________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 12.08.2022, 15:21 Titel: |
|
|
Nicht nur geht es mit den normalen Datentypen nicht, es geht vor allem auch dann nicht, wenn der Parameter kein Array ist.
Vermutlich prüft der Compiler in einem Type-Array Fall den Datentyp nicht korrekt. Sollte also ein Compiler Bug sein würde ich vermuten. _________________ Meist inaktiv - über PNs werde ich benachrichtigt. |
|