Autor Beitrag
Marco D.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2750

Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
BeitragVerfasst: So 14.01.07 20:15 
Ich schreibe soeben die Hinzufügen-Routine einer verketteten Liste (TParameterList):
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
type
  PItem = ^TItem;
  TItem = record
    Data: TParameter;
    Next: PItem;
  end;

procedure TParameterlist.AddAtEnd(AParameter: TParameter);
var NewItem: PItem;
begin
  New(NewItem);
  //das hier tritt immer wieder ein, auch beim zweiten und dritten mal O_o
  if (FFirst = nilthen
  begin
    showmessage('1');
    NewItem.Data := AParameter;
    NewItem.Next := nil;
    
    //warum ist FFirst hier nach immer noch nil?
    FFirst := NewItem;
    FLast := NewItem;

    Dispose(NewItem);
  end
  //dieser Block wird NIE durchlaufen
  else begin
    showmessage('2');
    NewItem.Data := AParameter;
    NewItem.Next := nil;

    FLast.Next := NewItem;
    FLast := NewItem;

    Dispose(NewItem);
  end;

  inc(FCount);
end;

//vlt. liegt's am constructor irgendwie???
constructor TParameterlist.Create;
begin
  FFirst := nil;
  FLast := nil;
  FCurrently := nil;

  FCount := 0;
end;

Das Problem ist mit Kommentaren versehen. ;)

_________________
Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
Tastaro
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 414
Erhaltene Danke: 23



BeitragVerfasst: Mo 15.01.07 11:11 
Huhu,

beim durchsehen des Codes hab ich folgendes festgestellt:
Die beiden dispose müssen aus der add-Routine natürlich raus. Sonst fügst du was hinzu und gibst es aber gleich wieder frei.
dispose musst du für jedes Element der Liste aufrufen, wenn du diese wieder komplett freigeben willst oder halt wenn du einzelne Elemente löschst.

Ansonsten sollte der Code wie er da steht funktionieren, wobei man leider nicht sieht, was sonst noch "drumherum" passiert.

Beste Grüße
Tastaro