Ah, danke.

Am 14.06.2016 um 07:53 schrieb Wolfgang Jäth:

Am 14.06.2016 um 03:31 schrieb Horst:
Hallo,

ich habe sonst immer ein Indexarray mit +1 vergrößert. Jetzt wollte ich
es mal verkleinern und stelle fest, das geht nicht. Es wird addiert.
Außer man belegt das Feld vorher mit 0

Warum?

Horst


Sub test1
       dim afeld(2)
Wenn Du eine Variable so definierst, ist wie vom Typ *Variant*. Es heißt
zwar, in Basic würden alle Vairablen vorinitialisiert, aber auf diesen
Typ trifft das nur sehr bedingt [tm] zu. Wenn sie jeden beliebigen Typ
aufnehmen kann, mit welchem Defaultwert (und damit Typ)  soll sie denn
dann bitte vorbelegt werden, als Integer, Double, Boolean, String,
Datum, Objekt, multidimensionales Array, oder als was sonst?

Eine Variable vom Typ Variant solltest Du also vor dem ersten Zugriff
unbedingt zuerst manuell initialisieren. Oder grundsätzlich noch besser
definierst Du die Variable gleich typisiert, also in dem Fall

| dim afeld%(2)

oder (noch klarer für den menschlichen Teil des Programms)

| dim afeld(2) as integer

       stext=""
      afeld(0)=0
          for f=0 to 2
wert=afeld(f)
                  afeld(f)=afeld(f) -1
Der Bug liegt IMHO eher darin, dass eine solche Anweisung auf einen
/uninitialisierten/ Variant *überhaupt* ausgeführt wird, sprich dass ein
"afeld(f)=afeld(f)+1" ein Ergebnis liefert, das /zufälligerweise/ auch
noch den Erwartungen entspricht.

Was ich meine, siehst Du, wenn Du afeld(0) mal nicht mit einem
(letztendlich beliebigen) Integer-Wert, sondern mit z. B. einem
Leerstring o. ä. vorbelegst; dann klappt nämlich auch "+1" nicht mehr ...

Wolfgang


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Antwort per Email an