AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Problem im Kompressionsprogramm

Ein Thema von Hannes91 · begonnen am 4. Jun 2011 · letzter Beitrag vom 5. Jun 2011
 
Benutzerbild von Hannes91
Hannes91

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

Problem im Kompressionsprogramm

  Alt 4. Jun 2011, 09:09
Hallo zusammen,

zu Testzwecken habe ich vor kurzem mit der Arbeit an einem Kompressionsprogramm begonnen, welches auf der Burrows-Wheeler-Transformation aufbaut. Nachdem ich alle hierfür benötigten Module (BWT, Move-To-Front, RLE, Huffman) fertig gestellt hatte, wollte ich nun große Dateien hiermit blockweise kodieren, um die Performance zu steigern.

Folgenden Code (Auszug) verwende ich zur Kodierung im Modul "uHuffman.pas":

Delphi-Quellcode:
function THuffman.Kodieren (sText : TAusgabe) : TAusgabe;
var
   i, j, iPos: integer;
   sZeichenBin : TAusgabe;
   KodZeichen : Array [0..255] of Array of byte;
begin
     for i := 0 to 255
     do
       begin
            if Baum[i].iHaeufigkeit > 0
            then
                begin
                     iPos := i;
                   
                     while Baum[iPos].iVater > 0
                     do
                       begin
                            setlength(KodZeichen[i], length(KodZeichen[i]) + 1); /// <-------

                            if Baum[Baum[iPos].iVater].iLinks = iPos
                            then KodZeichen[i, High(KodZeichen[i])] := 0
                            else KodZeichen[i, High(KodZeichen[i])] := 1;

                            iPos := Baum[iPos].iVater;
                       end;
                end;
       end;
     ...
TAusgabe ist ein dynamisches Array of Byte.
KodZeichen beinhaltet nach Durchlaufen obigen Codes alle 256 möglichen Kodierungen, so müssen sie nur einmal berechnet werden und können bei der eigentlichen Kodierung abgeschrieben werden.

Nach der erfolgreichen Kodierung einiger Blöcke stürzt das Programm jedoch irgendwann an der mit dem Pfeil markierten Stelle mit einer Access Violation ab. Liegt es vielleicht an den häufigen setlength() Aufrufen?

Ich hoffe, ihr habt dazu irgendwelche Vorschläge. Anbei der gesamte Quelltext mitsamt der zu kodierenden Datei test.txt (ist die Programmdatei einer früheren Version).


Liebe Grüße

Hannes



PS: Der Fehler von heute morgen tritt nun nicht mehr auf (kein Absturz beim Einlesen von Blöcken), vielleicht handelt es sich jedoch um dieselbe Ursache!?
Angehängte Dateien
Dateityp: rar Gesamt.rar (164,4 KB, 14x aufgerufen)
Hannes

Geändert von Hannes91 ( 4. Jun 2011 um 18:20 Uhr)
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz