AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Listen und wie man sie nutzt

Ein Thema von Obelisk2k5 · begonnen am 23. Jun 2010 · letzter Beitrag vom 24. Jun 2010
Antwort Antwort
Obelisk2k5

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

AW: Listen und wie man sie nutzt

  Alt 24. Jun 2010, 00:07
Records haben im Zeitalter der OO ausgedient.

Ich würde Objekte/Klassen erstellen welche die Daten halten sollen. Mit generics würde ich dann eine TObjectList ableiten, welche die Datenobjekte aufnimmt.
Wenn wie OL nun auch noch die Objekte besitzt, dann braucht man sich nicht einmal um das freigeben kümmern.
ForEach wird ebenfalls unterstützt.

Weitere Überlegung: Warum soviel Code schreiben, welche Fehler enthalten kann, wenn schon alles fertig ist.
Die Records sind vorgegeben.

Und wo steht, das alles fertig sei?
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#2

AW: Listen und wie man sie nutzt

  Alt 24. Jun 2010, 01:03
Überleg einmal, was passiert, wenn es genau ein Listenelement gibt.

Dein Developerbyindex wird genau einmal mit dem Parameter index=1 aufgerufen.

if index <= DevelopersCount liefert true

for i := 0 to index-1 do -> from 0 to 0, schleife wird genau einmal durchlaufen

current := current^.Next; -> first^.next = nil, weil es ja nur ein Listenelement gibt, der next pointer des ersten Listenelemts zeigt also auf kein weiteres.

current^.content = nil^.content = exception.


Im Posting 11 habe ich Dir schon geschrieben:

Zitat:
Wenn in der Schleife beim Weiterschalten einmal nil kommt, dann war der Index zu gross, da gehört eine Fehlermeldung oder was auch immer hinein.
Wenn Du das so überprüft hättest, hättest Du den Fehler schon längst gefunden.


Wenn Du das ERSTE Listenelemnt haben willst, musst Du 0 mal in der Schleife weitergehen, weil dzu Beginn zeigt Dein current ja schon auf das erste Element.
Du durchläufst die Schleife prinzipiell einmal zu oft, und fliegst deswegen am Ende hinaus.#

Geändert von mkinzler (24. Jun 2010 um 06:27 Uhr) Grund: Delphi-Tags eingefügt
  Mit Zitat antworten Zitat
Obelisk2k5

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

AW: Listen und wie man sie nutzt

  Alt 24. Jun 2010, 01:10
Überleg einmal, was passiert, wenn es genau ein Listenelement gibt.

Dein Developerbyindex wird genau einmal mit dem Parameter index=1 aufgerufen.

if index <= DevelopersCount liefert true

for i := 0 to index-1 do -> from 0 to 0, schleife wird genau einmal durchlaufen

current := current^.Next; -> first^.next = nil, weil es ja nur ein Listenelement gibt.

current^.content = nil^.content = exception.
Oh, das habe ich ja gar nicht gesehen.

Delphi-Quellcode:
function getDeveloperByIndex(index: Cardinal): TDeveloper;
var
  temp : TDeveloper;
  i: Integer;
begin
  current := first;
  if (index <= DevelopersCount) and (DevelopersCount > 1) then
    for i := 1 to index-1 do
      current := current^.Next;
  getDeveloperByIndex := current^.content;
end;
Sollte dann ja die richtige Variante sein.


Nur tritt der von mir beschriebene Fehler immernoch auf...

Geändert von mkinzler (24. Jun 2010 um 06:28 Uhr) Grund: Code-Tag durch Delphi-Tag ersetzt
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.869 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Listen und wie man sie nutzt

  Alt 24. Jun 2010, 06:29
Was spricht den gegen die Verwendung des Delphi-Tags in euren Beiträgen? Bei Delphicode sollte dieser immer verwendet weden
Markus Kinzler
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#5

AW: Listen und wie man sie nutzt

  Alt 24. Jun 2010, 09:50
Dir ist schon klar das die Funktion nicht das Element aus der Liste zurückgibt, sondern nur eine Kopie davon? Wird die Funktion aufgerufen wenn die Liste keine Elemente enthält, wird auf jeden Fall eine Zugriffsverletzung auftreten. Ansonsten mit dem Debugger Schritt für Schritt ausführen.

So würde ich das lösen:
Delphi-Quellcode:
type
 PDeveloper = ^TDeveloper;

function getDeveloperByIndex(index: Cardinal): PDeveloper;
begin
  current := first;
  while (index > 0) and Assigned(current) do
  begin
    current := current^.Next;
    Dec(index);
  end;
  if current <> nil then
    Result := @(current^.content)
  else
    Result := nil;
end;
Allerdings ist eine verkettete Liste für Zogriffe über einen Index wenig geeignet.
  Mit Zitat antworten Zitat
Antwort Antwort


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 01:53 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