Einzelnen Beitrag anzeigen

Benutzerbild von Tommi
Tommi

Registriert seit: 23. Mai 2003
27 Beiträge
 
Delphi 3 Professional
 
#4

Re: Rätselhafte Exceptions....?!

  Alt 9. Feb 2004, 11:15
Okay, das sind Auszüge aus der Unit, die unter anderen linked list units, den Fehler verursacht.

Delphi-Quellcode:
Unit LanguageHandler;

INTERFACE

Uses SysUtils, TokenString;

Type

    pLDEntry = ^LDEntry;

    LDEntry = Record
            Index : LongInt;
            ID,
            Value,
            Reason : String;
            Next : pLDEntry;
    End;


    tLangDef = Class

             Private
                    Items : pLDEntry;
                    Counter : LongInt;

                    Tokens : tTokenString;

                    Procedure Parse ( FN, Language : String; Rookie : Boolean );
                    Procedure Add ( ID, Value, Reason : String );
                    Procedure Remove ( Idx : LongInt );

             Public
                   Error : Boolean;

                   Constructor Init;
                   Destructor Done;

                   Procedure Build ( Language : String; Rookie : Boolean );
                   Function Get ( ID : String ) : String;
                   Function GetByIndex ( Idx : LongInt ) : LDEntry;
                   Function IsReason ( ID : String ) : Boolean;
                   Function GetReason ( ID : String ) : String;

                   Procedure Flush;
                   Procedure Debug;
    End;

IMPLEMENTATION

...

Constructor tLangDef.Init;
Begin
     Counter := 0;
     Error := False;
     Tokens := tTokenString.Init;
     Items := Nil;
End;

Destructor tLangDef.Done;
Begin
     Flush;
     Tokens.Done;
End;


Procedure tLangDef.Add ( ID, Value, Reason : String );

Procedure AppendItem ( Var ItemList : pLDEntry; Item : pLDEntry );
Begin
     If ItemList = Nil Then ItemList := Item Else
     Begin
          If ItemList^.Next = Nil Then ItemList^.Next := Item
           Else AppendItem ( ItemList^.Next, Item );
     End;
End;

Var Item : pLDEntry;
Begin
     New ( Item );
     Item^.Index := Counter;
     Item^.ID := ID;
     Item^.Value := Value;
     Item^.Reason := Reason;
     Item^.Next := Nil;
     AppendItem ( Items, Item );
     Inc ( Counter );
End;


{
Bei folgender Funktion, wird durch das Statement "If ItemList <> Nil Then" die Exception verursacht.
}


Function tLangDef.Get ( ID : String ) : String;

Function SearchItem ( Var ItemList : pLDEntry; ID : String ) : String;
Begin
     If ItemList <> Nil Then
     Begin
          If ItemList^.ID = ID Then SearchItem := ItemList^.Value
           Else SearchItem := SearchItem ( ItemList^.Next, ID );
     End;
End;

Begin
     Get := SearchItem ( Items, UpperCase(ID) );
End;


.
.
.

Begin
End.
Ich nehm mal an, daß die Fehlersuche für euch unmöglich sein dürfte, weil ich ansonsten das gesamte Projekt hochladen müßte, es sei denn oben befindet sich was vollkommen Offensichtliches, was mir entgangen ist.
Nachdem ich das Projekt gerade auf Vermutungen hin umgeschrieben habe, befindet sich die Exception nun im Laufzeit-Code, der von Virtual Pascal generiert wird. Es hängt nun mit der Speicher-Allokierung zusammen.
Okay... ich bin so richtig schön ratlos.


[edit=FuckRacism][delphi] Syntax Mfg, FuckRacism[/edit]
  Mit Zitat antworten Zitat