Thema: Delphi EInvalidPointer

Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 2. Jan 2003, 10:28
Moin Madeleine,

ich bin mir jetzt nicht sicher, ob's daran liegt, aber mir ist aufgefallen, dass Du fleissig Bitmaps erzeugst, aber nur das jeweils letzte erzeugte auch wieder freigibst, wenn das Formular geschlossen wird.

Jedesmal, wenn Du TBitmap.Create aufrufst, wird ein neues Bitmapobjekt erzeugt. Dadurch werden dann Resourcen belegt, die auch wieder freigeben werden müssen.

Die grundlegende Vorgehensweise sieht eigentlich so aus:

  • Objekt erzeugen
  • Etwas mit dem Objekt machen
  • Objekt freigeben

Das heisst: Jedes Create benötigt auch ein Free.

Wie man das jetzt macht hängt auch davon ab, an welchen Stellen man es im Programm braucht.
Die drei Möglichkeiten, die mir da so auf Anhieb einfallen wären:
  1. Erzeugen im initialization Abschnitt einer Unit, und freigeben im finalization Abschnitt (z.B. bei Programmglobalen Objekten)
  2. Erzeugen im OnCreate eines Formulares, und freigeben im OnDestroy (bei unitglobalen/formularglobalen Objekten)
  3. Verwendung eines try/finally Blockes bei (prozedur)lokalen Objekten

Auf den ersten Blick scheint mir bei Deinem Programm die 2. Variante am passensten zu sein, da Du die entsprechenden Variablen ja als Felder des Formulares deklariert hast.

Es genügt dann einfach die beiden Felder im OnCreate des Formulares zu erzeugen, dort auch ihre Werte einzustellen (z.B., wie Du es machst den Inhalt aus einer Datei zu laden), im Programm zu benutzen, und dann im OnDestroy wieder freizugeben.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat