[Allegro] acon bringt fehler: "Befehl nicht korrekt geformt"

Bernhard Eversberg ev at biblio.tu-bs.de
Mi Nov 12 09:58:03 CET 2014


Am 07.11.2014 10:58, schrieb Klaus Lehmann:
>
> Die Fehlermeldung "Befehl nicht korrekt geformt" kommt bei einer acon-aufgabe mit update.job
>
> Der Bildschirm sieht so aus:
> 296. Satz  :    >|9zdb82769-1<N:<E130> kein Ergebnis bei: |9 "zdb82769-1=?"
> Befehl nicht korrekt geformt
> EXCEPTION-Error (memory-access) in program "acon.exe" !!Drücken Sie eine beliebi
> ge Taste . . .
>

Vorweg:
Standardanwender sind nicht betroffen.


Bereitgestellt:

   ftp://134.169.20.101/a99.zip
   ftp://134.169.20.101/acon.zip

Es war ein Folgefehler. Der eigentliche Grund ist: Es entstehen bei
einem Satz mehr als 1000 Indexeinträge.
Der dafür vorgesehene Platz (32.000 Byte) reichte aus: die Schlüssel
bauchten nur 24k. Aber die Zahl 1000, die war der Grund: Es wird intern
eine Adressenliste der zum Satz gebildeten Schlüssel angelegt, und die
ist auf 1000 dimensioniert. Nachdem aber die 999 erreicht war und der
Schlüssel an die Liste angehängt. hat das Programm in die Adresse 1000
schon mal prophylaktisch eine 0 reingeschrieben. Weil aber die Zählung
mit 0 beginnt, ist die 1000 um 1 zu groß. Ob dann wirklich was passiert,
hängt davon ab, was im Speicher hinter diesem Adressenbereich liegt
und mit der 0 dann überschrieben wird. In diesem Fall ging's dann
wirklich schief. Die beobachteten Meldungen weisen auf den eigentlichen
Tatbestand nicht hin, das ist aber typisch in solchen Fällen.

Es stellte sich bei den konkreten Daten heraus, daß der Titel
"Bundesanzeiger" schuld war (ZDB 33414-5). Der will 1011 Schlüssel
generiert haben. Es entstehen korrekt nur 1000, aber die besagte
Adresse an der Position 1000 (also 1001), die wird eben überschrieben...

Die Reparatur war kein Problem. acon.zip und a99.zip liegen bereit.
acon für Linux müssen wir sowieso noch auf den Stand V34.7 bringen.
Nebenbei wurde die Anzahl von Schlüsseln pro Satz in a99 und acon
hochgehebelt auf 1200. (Und die 1201 wird nicht zum Problem, d.h.
der Knackpunkt wird nicht einfach nur verschoben, sondern ist weg.)

Sowas zehrt und zerrt an den Nerven von Entwicklern und betroffenen
Anwendern gleichermaßen. Kenner zeitgenössischer Softwareparadigmen
fragen sich (oder sogar uns) dann, warum man nicht strikt
objektorientiert programmiere mit C++ oder, noch besser, alles in
Java um- oder neu schreibe. Das liegt vor allem daran, daß eine
ausgereifte und verfügbare Version von C++ 1998 erschien, Java
wurde erstmals 1995 vorgestellt. Die allegro-Enwicklung in C++ begann
1985. Der Umfang der 1995 vorliegenden Codebasis war leider zu groß,
bzw. die Entwicklungsressourcen zu klein.
Außerden werden zeitgenössische Entwickler schon noch ein System
hervorbringen, vor 2020, das den genannten Vorstellungen entspricht
und allegro in mehr als nur solcher Hinsicht hinter sich läßt.

B.Eversberg





MfG B.E.







Mehr Informationen über die Mailingliste Allegro