AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Probleme mit dyn. Array & pseudo-doppelt verketteter Liste
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit dyn. Array & pseudo-doppelt verketteter Liste

Ein Thema von ManuMF · begonnen am 19. Jun 2006 · letzter Beitrag vom 20. Jun 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von ManuMF
ManuMF

Registriert seit: 11. Jul 2005
1.016 Beiträge
 
Delphi 6 Personal
 
#1

Probleme mit dyn. Array & pseudo-doppelt verketteter Lis

  Alt 19. Jun 2006, 21:13
Hallo,

im Unterricht programmieren wir gerade eine Art Labyrinth, das durchlaufen werden soll. Es besteht quasi aus einzelnen Feldern. Diese Felder sollen in einem Array abgelegt werden (für den leichten Zugriff), und die umgebenden Felder sind dem jeweiligen Feld bekannt (das ist die pseudo-doppelt verkettete Liste).

Damit man die Größe frei wählen kann, soll das Array dynamisch sein. Soweit sogut - das Erstellen klappt, auch das Laden aller "Knoten" (also Felder) in ein ListView.

Aber wenn ich das Programm beende, erscheint eine Zugriffsverletzung oder ein Runtime Error. Woran kann das liegen?

Hier ein bisschen Code:
Delphi-Quellcode:
// Die Listenstruktur:
type TKnoten = class(TObject)
  Oben: TKnoten;
  Unten, Links, Rechts: "
  end;

// Vorbereitung der Liste:
SetLength(KArray, [User-Eingabe]);
ListeErstellen;

// procedure ListeErstellen
// [Schleife]
KArray[SchleifenVeriable] := TKnoten.Init;
...
Wie gesagt, das Erstellen klappt. Aber muss ich beim Beenden was beachten? Irgendwas freigeben?

Danke,
ManuMF
Gruß,
ManuMF

Endlich hab ich was Positives an Vista entdeckt: Das mitgelieferte Mahjongg
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Probleme mit dyn. Array & pseudo-doppelt verketteter

  Alt 19. Jun 2006, 21:17
das wirklich interessante hast du aber wggwlassen, und wie sieht der Code zum Beenden aus?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von ManuMF
ManuMF

Registriert seit: 11. Jul 2005
1.016 Beiträge
 
Delphi 6 Personal
 
#3

Re: Probleme mit dyn. Array & pseudo-doppelt verketteter

  Alt 19. Jun 2006, 21:20
Hallo,

MainForm.Close; Mehr nicht . Bei der "normalen" doppelt verketteten Liste müsste man nichts machen, hat unser Info-Lehrer gesagt. Ich habe trotzdem immer Knoten für Knoten mit FreeAndNil eliminiert. Aber da hatten wir natürlich kein Array.

Gruß,
ManuMF

P.S.: Die Zugriffsverletzung kam aus einem anderen Grund, aber der Runtime Error kommt immer - es sei denn, man lässt die Liste bzw. das Array nicht erstellen.
Gruß,
ManuMF

Endlich hab ich was Positives an Vista entdeckt: Das mitgelieferte Mahjongg
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Probleme mit dyn. Array & pseudo-doppelt verketteter

  Alt 19. Jun 2006, 21:23
Einen dyn. Array "leert" man mit setLength( arr, 0);
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von ManuMF
ManuMF

Registriert seit: 11. Jul 2005
1.016 Beiträge
 
Delphi 6 Personal
 
#5

Re: Probleme mit dyn. Array & pseudo-doppelt verketteter

  Alt 19. Jun 2006, 21:27
Hallo,

ich habe es probiert, dann kommt aber eine Zugriffsverletzung, und beim 2ten Versuch wird das Programm erst geschlossen. Die AV kommt ebenfalls nicht, wenn die Liste nicht erstellt wurde.

Gruß,
ManuMF
Gruß,
ManuMF

Endlich hab ich was Positives an Vista entdeckt: Das mitgelieferte Mahjongg
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Probleme mit dyn. Array & pseudo-doppelt verketteter

  Alt 19. Jun 2006, 21:30
Schreib doch nochmal etwas mehr Code.

Und was ist .Init? Soll das der Konstruktor sein? Wenn man mit setlength das dynamische Array löscht, sind aber immer noch nicht die Objekte in der Liste freigegeben. Und eine doppeltverkettete Liste ist was ganz anderes, die wird mit New und Dispose erstellt bzw. gelöscht.

Hier wird ja alles in einen Topf geschmissen.

Gruss
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#7

Re: Probleme mit dyn. Array & pseudo-doppelt verketteter

  Alt 19. Jun 2006, 21:43
Ich denke, du versuchst, Objekte mehrmals freizugeben (schließlich gibt es 3-5 Referenzen auf jeden Knoten), was natürlich nicht funktioniert.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von ManuMF
ManuMF

Registriert seit: 11. Jul 2005
1.016 Beiträge
 
Delphi 6 Personal
 
#8

Re: Probleme mit dyn. Array & pseudo-doppelt verketteter

  Alt 19. Jun 2006, 21:45
Hallo,

yepp, Init ist der Constructor. Das mit den Knoten haben wir eben aus der doppelt verketteten Liste, wie wir sie im Unterricht durchgenommen haben. Bei dieser Version wurde ein neuer Knoten initialisiert und dann in die Liste geschoben und die Verknüpfungen neu gesetzt. Beim Beenden habe ich dann wie schon gesagt Knoten für Knoten aus der Liste genommen und dann mit FreeAndNil eliminiert. Jetzt haben wir eben ein Array - natürlich ist das keine doppelt verkettete Liste mehr, aber eben die Felder "kennen sich" wie in einer Liste. Die Struktur hat uns unser Lehrer vorgegeben.

Hier noch der Code für das Erstellen:

Delphi-Quellcode:
var
  LZahl: Cardinal = User-Eingabe, bei meinen Tests 3
  Knoten: Array of TKnoten;

{----------}

var X, Y: Cardinal;

begin
   SetLength(Knoten, Pred(LZahl));

   for Y := 0 to Pred(LZahl) do
   begin
      for X := 0 to Pred (LZahl) do
      begin
         Knoten[X + (Lzahl * Y)] := TKnoten.Start;
         Knoten[X + (Lzahl * Y)].Position := Point(X, Y);
         Knoten[X + (Lzahl * Y)].Nummer := X + (Lzahl * Y);
      end;
   end;

   for Y := 0 to Pred(LZahl) do
   begin
      for X := 0 to Pred (LZahl) do
      begin
         if (X <> 0) then
            Knoten[X + (Lzahl * Y)].KLinks := Knoten[X + (Lzahl * Y) - 1];

         if (X <> Pred(LZahl)) then
            Knoten[X + (Lzahl * Y)].KRechts := Knoten[X + (Lzahl * Y) + 1];

         if (Y <> 0) then
            Knoten[X + (Lzahl * Y)].KOben := Knoten[X + (Lzahl * Y) - Lzahl];

         if (Y <> Pred(Lzahl)) then
            Knoten[X + (Lzahl * Y)].KUnten := Knoten[X + (Lzahl * Y) + Lzahl];
      end;
   end;

   InListviewEinlesen;
@Khabarakh: Wie meinst du das? Bzw. wie kann ich das vermeiden?

Gruß,
ManuMF
Gruß,
ManuMF

Endlich hab ich was Positives an Vista entdeckt: Das mitgelieferte Mahjongg
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#9

Re: Probleme mit dyn. Array & pseudo-doppelt verketteter

  Alt 19. Jun 2006, 21:56
Zitat von ManuMF:
@Khabarakh: Wie meinst du das? Bzw. wie kann ich das vermeiden?
Deinen Aufräum-Code zu zeigen wäre kein schlechter Anfang . Grundsätzlich solltest du die Knoten nur über das Array und nicht untereinander freigeben.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von ManuMF
ManuMF

Registriert seit: 11. Jul 2005
1.016 Beiträge
 
Delphi 6 Personal
 
#10

Re: Probleme mit dyn. Array & pseudo-doppelt verketteter

  Alt 20. Jun 2006, 13:52
Hallo,

wie ich schon geschrieben habe: Ich habe keinen Code zum Aufräumen
Das Knoten-für-Knoten-löschen habe ich bisher nur in der Liste gemacht.

Gruß,
ManuMF
Gruß,
ManuMF

Endlich hab ich was Positives an Vista entdeckt: Das mitgelieferte Mahjongg
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:15 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