Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit Freigabe von Objekten (https://www.delphipraxis.net/12120-problem-mit-freigabe-von-objekten.html)

axelf98 20. Nov 2003 21:38


Problem mit Freigabe von Objekten
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!

Ich habe ein Proramm geschrieben, dass objektorientiert ist :) Es geht um ein Mathe-Programm, dass über beliebig viele Fenster verfügt, die dann jeweils ein Objekt sind. Das klappt alles wunderbar. Nun soll jedes Fenster auch Rechnen können, und deswegen habe ich so eine Klasse Rechner geschrieben; jedes Fenster bekommt einen Rechner. Und der rechnet auch, aber nur 1-2 mal und dann bekomm ich Zugriffsverletzungen und ungültige Zeigeroperationen...
Da ich nach Tests weiss, dass es nicht am Algorithmus liegen kann, hab ich den constructor und das Freigeben im Auge. In der Klasse kommen einige Arrays und Variablen vor.
Wie kann man sowas am besten freigeben?

Ihr könnt euch die Klasse ja mal anschauen...
(Ach ja, in einem anderen Programm hat die Klasse super funktioniert!)

Delphianer 20. Nov 2003 22:03

Re: Problem mit Freigabe von Objekten
 
Hallo,

wenn ich es richtig verstanden habe, weist Du jedem Fenster eine Instanz von Loesungssystem zu. Die Instanzen haben alle ihre eigenen Methoden, greifen aber gemeinsam auf die globalen Variablen zu. Ohne daß ich es probiert habe, glaube ich, besteht die Lösung darin, Deine Variablen in die Klasse zu verlagern, z.B. in den private-Abschnitt. Und noch ein Hinweis: es ist üblich (wenn auch nicht zwingend notwendig), Konstruktoren 'Create' und Destruktoren 'Destroy' zu nennen, daß macht es leichter, den Quelltext zu lesen, und produziert weniger Fehler, wenn Du mal Klassen ableiten solltest. Weiterhin sollte Dein Destruktor den von TObject aufrufen:

Delphi-Quellcode:
    ...
    destructor Destroy; override;
  end

destructor Destroy {Dein GibFrei};
begin
  .. hier aufräumen;
  inherited Destroy;
end;
Viele Grüße

axelf98 20. Nov 2003 22:12

Re: Problem mit Freigabe von Objekten
 
Danke für die Tipps.. In der Schule heisst das immer gibfrei *g*
Na egal! Aber ich bekomm immer noch Ungültige Zeigeroperationen...

Ich häng mal die Exe hinten dran, damit ihr euch auch was unter dem Programm vorstellen könnt:

Bei der Eingabe einfach mal ein paar Zahlen eingeben!

scp 20. Nov 2003 22:42

Re: Problem mit Freigabe von Objekten
 
OK, die funktionsweise deines Prog hab ich mir schon ungefähr so vorgestellt, aber was hast du jetzt an deiner Klasse geändert? könntest du die .pas nochmal schicken?

scp 20. Nov 2003 23:49

Re: Problem mit Freigabe von Objekten
 
Also, habs mal getestet:
Ich habe mal irgendwelche Phantasie-Zahlen verwendet und es durchlaufen lassen (soweit es ging).

Bei TLoesungssystem.istgeloest() tritt ein Fehler auf, wenn Parameter X 0 (null) ist, weil dann die erste j-Schleife nicht durchlaufen wird, des halb musst du nach der Schleife
Delphi-Quellcode:
    If (X = 0) then j := 0;
einsetzen.

Wenn TLoesungssystem.einfachstezeilefinden() als Ergebnis -1 zurückgibt, wird ein Fehler ausgelöst, weil in TLoesungssystem.Systemloesen() ja dann Matrix[line,j] nicht funktioniert = ausserhalb des zulässigen Bereichs der Array.

Weiter bin ich noch nicht gekommen, weil ich auf die Schnelle nicht darauf komme, was gemacht werden soll, wenn line -1 ist.

[edit]
So, habs mal mit nem If gelöst, das er die nä. drei Zeilen nicht aus führt, wenn line -1 ist. Danach kommen keine Fehler mehr. Erstellen und Freigeben der Klasse und beenden des Programms gehen jetzt ohne Fehler.
[/edit]

axelf98 21. Nov 2003 06:31

Re: Problem mit Freigabe von Objekten
 
Ok, ich versuch mal die anfrage einzubauen..


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:43 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