Seite 1 von 2

Erklärung für Fehlermeldung?

Verfasst: Mi, 20. Aug 2014 20:50
von Jan
Ich habe gerade von einer Kundin dieses Fehlerprotokoll zugesandt bekommen:

Code: Alles auswählen

Sprachen-Version    : 1.90.355
Betriebssystem      :Windows 7 06.01 Build 07601 Service Pack 1
------------------------------------------------------------------------------
oError:args         :
          -> VALTYPE: N VALUE:0
          -> VALTYPE: N VALUE:2
oError:canDefault   : .F.
oError:canRetry     : .F.
oError:canSubstitute: .T.
oError:cargo        : NIL
oError:description  : Zahlenwert zu gro▀ oder zu klein
oError:filename     : 
oError:genCode      : 10
oError:operation    : <0> * <2>
oError:osCode       : 0
oError:severity     : 2
oError:subCode      : 5
oError:subSystem    : BASE
oError:thread       : 5
oError:tries        : 0
Was soll das bedeuten? 0*2 gibt einen zu großen oder zu kleinen Zahlenwert???

Die Codezeile sieht so aus:

Code: Alles auswählen

aPersonendaten[Len(aPersonendaten)][13] := aPersonendaten[i][13] * 2
Hat jemand dafür eine Erklärung? Das Teil ist schon tausende Male vollkommen normal durchgelaufen.

Jan

Re: Erklärung für Fehlermeldung?

Verfasst: Mi, 20. Aug 2014 22:32
von Lewi
Es sieht so aus, dass i=0 und es dann bei aPersonendaten[0][13] zu einem Laufzeitfehler kommt.

Re: Erklärung für Fehlermeldung?

Verfasst: Mi, 20. Aug 2014 22:39
von Jan
Hallo Olaf,

das kann es leider nicht sein, das wär zu einfach. i kann niemals 0 sein. Element [13] aber sehr wohl, das wird damit initialisiert, damit die Multiplikation immer klappt.

Und die Fehlermeldung sagt ja auch irgwendwas von der Multiplikation mit 0. Was doch mathematisch gesehen kein Problem ist.

Jan

Re: Erklärung für Fehlermeldung?

Verfasst: Mi, 20. Aug 2014 22:58
von Werner_Bayern
Servus Jan,

das alte Problem bei Win 64bit Division durch Null jetzt auch bei Multiplikation mal Null? PDR 6130 oder PDR 6286?

Re: Erklärung für Fehlermeldung?

Verfasst: Mi, 20. Aug 2014 23:28
von Jan
Halo Werner,

hmmm. Die beiden PDR sprechen aber von Division. Und den Hotfix 35 habe ich natürlich installiert.

Jan

Re: Erklärung für Fehlermeldung?

Verfasst: Do, 21. Aug 2014 7:28
von brandelh
die Fehlermeldung bezieht sich auf die Multiplikation, damit sind die beiden Einzelelemente schon aufgelöst worden:
aPersonendaten[13] => 0
2 => 2
0 * 2 => 0 und zwar ohne irgendwelche Zweifel.

War es ein einmaliger Fehler oder kannst du es nachvollziehen ?

Eine solche Fehlermeldung habe ich noch nie gesehen.

Re: Erklärung für Fehlermeldung?

Verfasst: Do, 21. Aug 2014 7:35
von Jan
Hubert,

das erste mal das ich diesen Fehler hatte. Die Funktion läuft so seit mehr als fünf Jahren. Und nein, ich kenne sowas auch nicht, vor Allem - der Text der Fehlermeldung irritiert mich, denn bei einer Multiplikation kann es doch keinen zu großen oder zu kleinen Wert geben ... OK, zu groß vielleicht, wenn man die Grenzen einer Variablen sprengt. Aber das passiert da ganz sicher nicht.

Jan

Re: Erklärung für Fehlermeldung?

Verfasst: Do, 21. Aug 2014 7:42
von Martin Altmann
Was für eine Fehlermeldung bekommst Du denn bei den folgenden Operationen:

Code: Alles auswählen

0 * "2"
"0" * 2
"0" * "2"
Nur mal so als dumme Idee...

Viele Grüße,
Martin

Re: Erklärung für Fehlermeldung?

Verfasst: Do, 21. Aug 2014 7:50
von Jan
Hallo Martin,

das wird sehr sicher eine andere Fehlermeldung ergeben. Da dann ein Typemismatch vorliegt. Aber hier gibt die Fehermeldung ja ganz klar an, das beide Werte numerische sind. Und reproduzierbar ist der Fehler ja ohnehin nicht für mich. Mal eben ausprobieren ist leider nicht ...

Jan

Re: Erklärung für Fehlermeldung?

Verfasst: Do, 21. Aug 2014 8:01
von Herbert
Jan hat geschrieben: Die Codezeile sieht so aus:

Code: Alles auswählen

aPersonendaten[Len(aPersonendaten)][13] := aPersonendaten[i][13] * 2
Jan, schau mal die linke Seite an.
Wenn aPersonendaten[13] null ist, dann könnte eventuell Len(aPersonendaten) auch null sein, das heisst, man kann nicht zuweisen.

Re: Erklärung für Fehlermeldung?

Verfasst: Do, 21. Aug 2014 8:23
von brandelh
Herbert hat geschrieben:
Jan hat geschrieben:Wenn aPersonendaten[13] null ist, dann könnte eventuell Len(aPersonendaten) auch null sein, das heisst, man kann nicht zuweisen.

Code: Alles auswählen

aPersonendaten[Len(aPersonendaten)][13] => aPersonendaten[0][13]
müsste aber einen "subscript out of range" Fehler erzeugen.

Re: Erklärung für Fehlermeldung?

Verfasst: Do, 21. Aug 2014 8:24
von Jan
Hallo Herbert,

nein, das kann es nicht sein. Das Array hat immer mindestens die Länge 2. Garantiert.

Und außerdem wäre die Fehlermeldung dann eine andere, die würde auf den Zugriff eines ungültigen Arrayinhaltes hinweisen.

Jan

Re: Erklärung für Fehlermeldung?

Verfasst: Do, 21. Aug 2014 8:34
von brandelh
PS: ich tippe auf einmalige kosmische Störung oder eine Hardware Störung ;-)

Re: Erklärung für Fehlermeldung?

Verfasst: Do, 21. Aug 2014 8:36
von brandelh
Jan hat geschrieben:Hallo Hubert,
nein, das kann es nicht sein. Das Array hat immer mindestens die Länge 2. Garantiert.
Und außerdem wäre die Fehlermeldung dann eine andere, die würde auf den Zugriff eines ungültigen Arrayinhaltes hinweisen.
Jan
Herbert hatte das vorgeschlagen und ich hatte ihm mit den gleichen Argumenten wie du widersprochen :badgrin:

Also auch du kannst uns nicht auseinander halten [-X

Re: Erklärung für Fehlermeldung?

Verfasst: Do, 21. Aug 2014 8:38
von brandelh
wobei ...

auch wenn ein Array 100 Zeilen und 1000 Spalten enthielte, eine 0 als Zugriffsindex bringt immer einen Fehler "subscript out of range" :badgrin:

Re: Erklärung für Fehlermeldung?

Verfasst: Do, 21. Aug 2014 9:32
von Jan
Richtig. Aber ein Len(aArray) ergibt dann halt kein 0

Jan

Re: Erklärung für Fehlermeldung?

Verfasst: Do, 21. Aug 2014 9:34
von Herbert
Hubert, Herbert... wir machen ja dasselbe...

Ich hoffte einfach auf einen anderen Ansatz.
Die logische Fehlermeldung wäre das out of range, was mir wohl beusst ist. Aber Fehlermeldungen haben gerne eine Eigendynamik, insbesondere, wenn die Ursache komplexer ist.

Re: Erklärung für Fehlermeldung?

Verfasst: Do, 21. Aug 2014 9:36
von Herbert
Jan hat geschrieben:Richtig. Aber ein Len(aArray) ergibt dann halt kein 0
Jan
OK, und was ist dort für ein Wert drinnen, bevor du den neuen Inhalt schreiben willst? Ein False eventuell? (Ja, ich weiss, da sollte auch eine andere Fehlermeldung kommen)

Re: Erklärung für Fehlermeldung?

Verfasst: Do, 21. Aug 2014 9:51
von Jan
Hallo Herbert,

grundsätzlich vorgegeben sind Werte von 0 bis 3. Es gibt kein Arrayelement, das nicht einen dieser Werte hat.

In diesem Fall eine 0, das sagt ja auch die Ferhlermeldung aus. Und der Verweis auf die Codezeile gibt das auch her, denn dort wird der gespeicherte Wert mit 2 Multipliziert. Da in der Fehlermeldung steht, das 0*2 nicht geht, muß also eine 0 drin gestanden haben.

Jan

Re: Erklärung für Fehlermeldung?

Verfasst: Do, 21. Aug 2014 9:57
von Koverhage
Egal ob Hotfix 35 installiert ist (Jan vielleicht bei Dir aber nicht bei den Runtimes des Kuden ?)
Es kann eigentlich nur eine Division durch 0 sein, die nicht ausreichend abgefangen wird.
Xbase++ zeigt dann auch nur 0 an, hat aber Intern einen ganz anderen Wert.

Einfach mal mit VX (wenn der so toll ist, ich habe den leider nicht und konnte den damals auch nicht installieren) testen
aPersonendaten[13] := Wert der durch 0 dividiert wird
eventuell kann VX den Wert darstellen.

Re: Erklärung für Fehlermeldung?

Verfasst: Do, 21. Aug 2014 10:14
von Rolf Ramacher
Hi Jan

kann es denn sein, das ein Wert NIL hat. ??

Re: Erklärung für Fehlermeldung?

Verfasst: Do, 21. Aug 2014 11:07
von komnick
Hallo Jan,

vielleicht macht 64bit Probleme, wenn aPersonendaten[13] nahe 0, aber ungleich 0 ist?
(also z.B. aPersonendaten[13] := 1 - 1/3 - 2/3)
Auf welche Art wird aPersonendaten[13] gefüllt? Fehlt hier ein Runden?

Gruß, Martin.

Re: Erklärung für Fehlermeldung?

Verfasst: Do, 21. Aug 2014 11:11
von Jan
Klaus,

die Kunden haben exakt die gleichen dll wie ich. Das läuft über die Updatefunktion automatisch.

VX würde bei einer Division durch 0 den gleichen Laufzeitfehler geben wie sonst auch. Aber hier gibt es im Code keine Division, und auch die fehelrmeldung weißt nichts darauf hin.

Jan

Re: Erklärung für Fehlermeldung?

Verfasst: Do, 21. Aug 2014 11:11
von Jan
Rolf,

wie jetzt schon mehrfach geschrieben: Nein!

Jan

Re: Erklärung für Fehlermeldung?

Verfasst: Do, 21. Aug 2014 11:13
von Jan
Martin,

das kann es nicht sein. Denn wenn der Wert minimal daneben liegt kann das Ergebnis nicht zu groß oder zu klein sein. Ich habe ja hier kein Rundungsproblem sondern einen Laufzeitfehler.

Jan