Einzelnen Beitrag anzeigen

Obelisk2k5

Registriert seit: 20. Jun 2010
14 Beiträge
 
Delphi 2 Desktop
 
#10

AW: Listen und wie man sie nutzt

  Alt 23. Jun 2010, 22:01
Ich habe jetzt einen anderen Fehler.

Und zwar bekomme ich die Fehlermeldung
Zitat:
Im Projekt [Name] ist eine Exception der Klasse EAccessViolation mit der Meldung
'Zugriffsverletzung bei Adresse 004C2DDA in Modul '[Name]'.
Lesen von Adresse 00000000 aufgetreten.
Code:
Delphi-Quellcode:
type
  TListe = ^TElement;
  TElement = record
               content : TDeveloper;
               Next : TListe;
             end;

var
  First : TListe = nil;
  Last : TListe = nil;
  Current : TListe;
  Allocations : integer = 0;

function newDeveloper(person: TPerson; description: TDescription) : boolean;
var
  RunPointer : TListe;
  I: byte;
  Temp_ID: Integer;
begin
  if developersCount < DEVELOPER_MAX then
  begin
  // ---- Temporäre ID -------------------------------------------------------
  Temp_ID := DEVELOPER_ID_MIN;
  //- Wenn es schon andere Developer gibt, wird die Temporäre ID inkrementiert,
  //-- bis sie einen Wert hat, der noch nicht als Developer ID vergeben ist --
  if developersCount > 0 then
    begin
    for I := DEVELOPER_MIN to DEVELOPER_MAX do
      begin
      Runpointer := first;
      While RunPointer <> nil do
        begin
        if Runpointer^.content.developerID = Temp_ID then inc(Temp_ID);
        Runpointer := Runpointer^.Next;
        end;
      end;
    end;
  new (Current);
  inc(Allocations);
  Current.content.developerID := Temp_ID;
  Current.content.developerPerson := person;
  Current.content.developerDescription := description;
  Current.Next := nil;
  if last = nil then
    begin
    First := Current;
    Last := Current;
    end
    else
     begin
     Last.Next := Current;
     Last := Current;
     end;
  newDeveloper := true;
  end
  else newDeveloper := false;
end;

function developersCount: Integer;
var
  i : integer;
begin
  i := 0;
  current := first;
  while current <> nil do
    begin
    inc(i);
    current := current^.Next;
    end;
  developersCount := i;
end;

function getDeveloperByIndex(index: Cardinal): TDeveloper;
var
  temp : TDeveloper;
  i: Integer;
begin
  i := 0;
  current := first;
  while i <> index do
  begin
    inc(i);
    current := current^.Next;
  end;
  getDeveloperByIndex := current^.content; // <<====== Hier tritt der Fehler auf.
end;
Ich füge mit NewDeveloper einen developer hinzu.
In einer anderen Unit lasse ich eine for-Schleife von 1 - developersCount durchlaufen,
bei dem ich den developer mit dem Index I durch getDeveloperbyIndex auslesen lasse und
einige Werte in einer listbox anzeigen lasse.

Die obigen Codeteile sind die einzigen, die ich verändert habe (vorher lief alles über Arrays),
von der anderen Unit sollte der Fehler nicht kommen.

Geändert von Obelisk2k5 (23. Jun 2010 um 22:25 Uhr) Grund: Code-Tag durch Delphi-Tag ersetzt
  Mit Zitat antworten Zitat