![]() |
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!) |
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:
Viele Grüße
...
destructor Destroy; override; end destructor Destroy {Dein GibFrei}; begin .. hier aufräumen; inherited Destroy; end; |
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! |
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?
|
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:
einsetzen.
If (X = 0) then j := 0;
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] |
Re: Problem mit Freigabe von Objekten
Ok, ich versuch mal die anfrage einzubauen..
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:54 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-2025 by Thomas Breitkreuz