Einzelnen Beitrag anzeigen

Benutzerbild von Hannes91
Hannes91

Registriert seit: 28. Aug 2010
Ort: Hamburg
15 Beiträge
 
Delphi 2010 Professional
 
#3

AW: Problem im Kompressionsprogramm

  Alt 5. Jun 2011, 14:02
Hi ASM,

zunächst möchte ich mich bei dir für deine Mühe bedanken . Schönheit und Sauberkeit sowie Optimierung des Quellcodes sind wohl hier bei mir allesamt auf der Strecke geblieben. An die try..finally - Blöcke hatte ich gar nicht mehr gedacht, zumal wir in der Schule sowieso über absolut notwendige Grundlagen (if .. then .. else ..) nicht hinausgekommen sind.

Zitat:
Vermutlich hast Du in den Compileroptionen die Bereichsüberprüfung sowie die Überlaufprüfung abgeschaltet. Das aber sollte man während der Entwicklung nie machen. So siehst Du natürlich nicht, wo eklatante Fehler im Programm stecken und wann genau sie auftreten.
Du hast ja so Recht, es war tatsächlich abgeschaltet. Sonst hätte ich wohl auch einige Unzulänglichkeiten selbst entdeckt.


Zitat:
In der Methode THuffman.Dekodieren(): die Variable iPos ist genau wie die Felder iLinks und iRechts des Records Baum als Integer deklariert, alle können also im Laufe der Abarbeitung durchaus einen Wert >255 enthalten. Der Wert von iPos (geholt aus den Feldern des Records) wird aber übergeben an eine Instanz von TAusgabe, welche jedoch ein Array von Byte ist. Folglich (und beobachteterweise auch tatsächlich) kommt es im Verlauf irgendwann zu der dadurch provozierten Inkompatibilität, d.h. zum Bereichsüberlauf..
Dieser Baum (also das Array) ist in zwei Bereiche geteilt:
- 0..255 enthält die eigentlichen Zeichen
- 256..510 beinhaltet die Knoten/Väter
Beim Dekodieren beginnt der Algorithmus am obersten Knoten/ der Wurzel und arbeitet sich zunehmend tiefer in die Äste, sodass als Rückgabewert von iPos nur der Wertebereich 0..255 in Frage kommt. Ist leider nicht richtig geglückt, da eigentlich Byte ausreichen würde, iPos jedoch als integer deklariert ist.


Zitat:
Wenig professionel ist auch die ständige Längenveränderung der dynamischen Arrays[...]
Zu meiner Verteidigung: Ich wollte die Speicherverwaltung lieber nicht antasten, bevor nicht der Rest soweit steht (zugegeben mit Schwächen).

---
Ich habe kaum deine Anmerkungen berücktsichtigt, schon funktioniert's. (Oh, was für eine Überaschung. )

So, nochmals vielen Dank für die Opferung deiner Zeit, ich nehme mir deine Ratschläge sehr zu Herzen.

Liebe Grüße und noch einen schönen Nachmittag

Hannes
Hannes
  Mit Zitat antworten Zitat