Allgemeine Fragen zur PROFAN Programmierung
Views (Heute): 240884 (2320)
  Suchen
 Zurück zur Übersicht
 AutorThema: Profan Fehler ?
Wolfgang Voigt
Datum:12.09.02 14:21 Antwortenals Email verschicken (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


Roland G. Hülsmann
Datum:12.09.02 16:28 Antwortenals Email verschicken (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



Wolfgang Voigt
Datum:13.09.02 08:49 Antwortenals Email verschicken (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



Wolfgang Voigt
Datum: 13.09.02 09:26 Antwortenals Email verschicken (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



 Zurück zur Übersicht