Autor | Thema: Profan Fehler ? | | Datum:12.09.02 14:21 
(wolfgang.voigt@modata.de) | |
Hallo allezusammen
bin auf folgenden Fehler gestossen.
Im Interpretermodus funktioniert das Testprogramm,
compiliert bzw gelinkt kommt der Fehler
was mache ich da falsch, oder ist es ein Fehler in V7.5 ?
' Exception EAccessViolation im Modul TEST.exe bei 00048BC6
' Zugriffsverletzung bei Adresse 00449DA6 Lesen von Adresse FFFFFFFF
Decimals 2
Numwidth 9
Strwidth 9
DIM$ 3
Declare EIN![3,6]
Declare l%,ll%,m%,ml%
Let l%=3
Let m%=6
CLS
LIST$ 1 = "T E X T 1xx"
LIST$ 2 = "T E X T 2xx"
LIST$ 3 = "T E X T 3xx"
WHILEloop 0,l%
Let ll% = &LOOP
WHILEloop 0,m%
Let ml% = &LOOP
Let EIN![ll%,ml%] = 0.0
ENDWHILE
ENDWHILE
Let EIN![1,1] = 100.00
Let EIN![2,2] = 100.00
Let EIN![3,3] = 100.00
Let EIN![1,4] = 100.00
Let EIN![2,5] = 100.00
Let EIN![3,5] = 100.00
let ll%=1
whilenot @gt(ll%,l%)
print @left$(@LIST$(ll%),9); ' Führt zu : Ausnahme Fehler
' print @left$("T E S T 1xx",9); ' alternative führt zu Fehler: keine Zahl s.u.
let ml%=1
whilenot @gt(ml%,m%)
print EIN![ll%,ml%]; ' FEHLER: Keine Zahl !
Let EIN![ll%,0] = @add(EIN![ll%,0],EIN![ll%,ml%])
Let EIN![0,ml%] = @add(EIN![0,ml%],EIN![ll%,ml%])
inc ml%
ENDWHILE
print EIN![ll%,0]
inc ll%
ENDWHILE
print "Summe";
WHILEloop 1, m%
Let ml% = &LOOP
print EIN![0,ml%];
ENDWHILE
print ""
waitinput
end
|
| | Datum:12.09.02 16:28 
(rgh-soft@t-online.de) | |
Hallo Wolfgang,
ich konnte das Problem nachvollziehen. Es könnte ein Bug in PROFAN bei Arrays vorliegen. Gefunden habe ich ihn aber noch nicht. Aber einen Workaround der Dir weiterhilft:
<...>
whilenot @gt(ll%,l%)
let a$=@left$(@list$(ll%),9)
print a$;
let ml%=1
whilenot @gt(ml%,m%)
print str$(EIN![ll%,ml%]);
Let EIN![ll%,0] = @add(EIN![ll%,0],EIN![ll%,ml%])
Let EIN![0,ml%] = @add(EIN![0,ml%],EIN![ll%,ml%])
inc ml%
ENDWHILE
print EIN![ll%,0]
inc ll%
ENDWHILE
<...>
Im Deklarationsteil muß natürlich noch ein DECLARE A$ hinzugefügt werden. Der Ausnahmefehler wird umgangen, in dem der auszugebende Text zuvor der Variablen A$ zugewiesen wird und der zweite Fehler (Keine Zahl), in dem der Ausdruck zuvor mit STR$() in einen String umgewandelt wird. Und schon funktioniert es, wie es soll!
Gruß
Roland
|
| | Datum:13.09.02 08:49 
(wolfgang.voigt@modata.de) | |
Hi Roland,
das Problem ist damit nicht aus der Welt.
Das mit dem A$ habe ich auch schon probiert, ohne Erfolg.
Das @str$(EIN!) führt zu dem selben Zugriffsfehler.
Sorry, aber es ist so.
Gruss
Wolfgang
|
| | Datum: 13.09.02 09:26 
(wolfgang.voigt@modata.de) | |
HI Roland
ich habe die routine etwas umgeschrieben. jetzt funktioniert es ! ich glaube garnicht, dass es mit den arrays zu tun hat, wenn ich alle print aus der schleife rausnehme, ist der fehler ja weg!? ausserdem ist der 1. print der zum fehler führte ein listenelement (DIM$)
gruss
wolfgang
whileloop 1,l%
let ll%=&LOOP
let z$=@left$(@LIST$(ll%),9)
whileloop 1,m%
let ml%=&LOOP
Let z$ = z$;@str$(EIN![ll%,ml%])
Let EIN![ll%,0] = @add(EIN![ll%,0],EIN![ll%,ml%])
Let EIN![0,ml%] = @add(EIN![0,ml%],EIN![ll%,ml%])
ENDWHILE
Let z$ = z$;@str$(EIN![ll%,0])
print z$ ' print ZEILE
ENDWHILE
|
|
|