AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Wie lösche ich eine komplette Liste? (Pointer)
Thema durchsuchen
Ansicht
Themen-Optionen

Wie lösche ich eine komplette Liste? (Pointer)

Ein Thema von Wusel · begonnen am 25. Okt 2003 · letzter Beitrag vom 27. Okt 2003
Antwort Antwort
Seite 2 von 2     12   
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: Wie lösche ich eine komplette Liste? (Pointer)

  Alt 25. Okt 2003, 15:12
Die Liste wird komplett gelöscht: du prüfst, ob pFirst <> nil ist. pFirst ist genau dann nil, wenn an der Stelle kein Element sitzt.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von Wusel
Wusel

Registriert seit: 27. Sep 2003
Ort: Riesa
54 Beiträge
 
Delphi 6 Personal
 
#12

Re: Wie lösche ich eine komplette Liste? (Pointer)

  Alt 25. Okt 2003, 15:16
prima

nochmal danke an euch
  Mit Zitat antworten Zitat
Benutzerbild von Wusel
Wusel

Registriert seit: 27. Sep 2003
Ort: Riesa
54 Beiträge
 
Delphi 6 Personal
 
#13

Re: Wie lösche ich eine komplette Liste? (Pointer)

  Alt 25. Okt 2003, 16:07
hm ... jetzt bekomm ich den Fehler EInvalidPointer und er markiert mir die Zeile wo ich die Procedur DelWholeList aufrufe. Kann es damit zusammenhängen, dass ich nen record benutze?
  Mit Zitat antworten Zitat
Benutzerbild von Wusel
Wusel

Registriert seit: 27. Sep 2003
Ort: Riesa
54 Beiträge
 
Delphi 6 Personal
 
#14

Re: Wie lösche ich eine komplette Liste? (Pointer)

  Alt 25. Okt 2003, 18:15
Also hier mal der Code eventuell seht ihr den Fehler

Delphi-Quellcode:
type
  PZahl = ^TZahl;
  TZahl = record
    Next : PZahl;
    iZahl : Integer;
    dwWann : Cardinal;
  end;

Var
  p, // Hilfvariable, genauso wie p2
  pFirst, // gibt immer die 1. Zeile an
  p2 : PZahl;

procedure AddItem(iNumber : Integer; dwZeit : Cardinal);
begin
  New(p); // holt Speicher
  p^.iZahl := iNumber; // setzt die Zahl in den Speicher
  p^.dwWann := dwZeit;
  p^.Next := nil; // setzt letztes Element auf nil
  if pFirst = nil then // setzt die erste Zeile, wenn noch nicht vorher gemacht
    pFirst := p
  else
  begin
    p2 := pFirst;
    while (p2^.Next <> nil) do // wandert an die letzte Zeile
      p2 := p2^.Next;
    p2^.Next := p;
  end;
end;

procedure DelWholeList;
begin
  while (pFirst <> nil) do // es wird solange gelöscht, bis pFirst nil ist
  begin // und das ist wenn die Liste zu ende ist
    p := pFirst;
    pFirst := pFirst^.Next;
    Dispose(p);
  end;
end;
Wo liegt da der EInvalidPointer Fehler
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#15

Re: Wie lösche ich eine komplette Liste? (Pointer)

  Alt 26. Okt 2003, 19:33


Man da muss ich mir ja noch eine Aufgabe ausdenken , wenn das so schnell geht...


Delphi-Quellcode:
Var
  p, // Hilfvariable, genauso wie p2
  pFirst, // gibt immer die 1. Zeile an
  p2 : PZahl;
Hilfsvariablen (p, p2) sind bei mir niemals Global.

Delphi-Quellcode:
function GetLast : PZahl;
// wandert an die letzte Zeile
begin
  Result := pFirst;
  while (Result^.Next <> nil) do
    Result := Result^.Next;
end;

procedure AddItem(iNumber : Integer; dwZeit : Cardinal);
var pTmp : PZahl;
begin
  New(pTmp); // holt Speicher
  with pTmp^ do
    begin
      iZahl := iNumber; // setzt die Zahl in den Speicher
      dwWann := dwZeit;
      pNext := nil; // setzt letztes Element auf nil
    end;
  if pFirst = nil then // setzt die erste Zeile, wenn noch nicht vorher gemacht
     pFirst := pTmp
  else
     GetLast^.pNext := pTmp;
end;

procedure DelWholeList;
var pDel,
    pTmp : PZahl;
begin
  pTmp := pFirst;
  while (pTmp <> nil) do // es wird solange gelöscht, bis pTmp nil ist
    begin // und das ist wenn die Liste zu ende ist
      pDel := pTmp;
      pTmp := pTmp^.pNext;
      Dispose(pDel);
    end;
end;
Übrigens Doku reicht aus.

Schick mir mal eine PM, damit ich genau weis wer Wusel ist .
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#16

Re: Wie lösche ich eine komplette Liste? (Pointer)

  Alt 27. Okt 2003, 11:35
Chewie hat den iterativen Algorithmus aufgezeigt, vielleicht hilft dir vom Verständnis her noch der rekursive Algo weiter.

Delphi-Quellcode:
procedure Free(P: PNode);
begin
  if P <> nil then
  begin
    Free(P.Next);
    Dispose(P);
  end;
end;
Gruß Hagen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 03:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz