Schreiben Sie eine Delphi-Anwendung, die die Ressourcenzuweisung nicht zum Absturz bringt
Der Schlüssel besteht darin, sicherzustellen, dass das Programm auch dann funktioniert, wenn im Programm Ressourcen zugewiesen werden, auch wenn ein Fehler auftritt
Das Programm sollte auch in der Lage sein, belegte Ressourcen freizugeben.
Dateien, Speicher, WINDOWS-Ressourcen und Objekte müssen von Zeit zu Zeit hinzugefügt werden
Achten Sie darauf, dass Ressourcen freigegeben werden. Im folgenden Codebeispiel für die Ereignissteuerung
Zuerst wird Speicher zugewiesen, dann tritt ein Fehler auf, der dazu führt, dass er nicht mehr ausgeführt wird.
Programmcode zur Speicherfreigabe:
PROcedureTForm1. ButtonlClick(Sender:Tobject
);
Var
Zeiger1: Zeiger;
Integer1,Numzero:Intger;
beginnen
Numnull:Κ0;
GetMem(Pointer1, 1024); {1K Speicherressourcen zuweisen}
Integer1: Κ5divNumzero; {Dieser Satz erzeugt einen Divisionsfehler
Fehler}
FreeMem (Pointer1, 1024); {Dieser Satz wird hier nicht ausgeführt
OK}Ende;
Obwohl die meisten Fehler nicht so offensichtlich sind, enthält das obige Beispiel wichtige Fehler
Ein Punkt: Wenn ein Fehler auftritt, springt die Programmausführung aus dem Modul und nachfolgende Ressourcen werden freigegeben.
Der Programmcode wird nicht mehr ausgeführt. Um sicherzustellen, dass FreeMem im obigen Beispiel dies kann
Um die von GetMem belegten Speicherressourcen freizugeben, muss der Code in eine Ressource eingefügt werden
Schutzmodul.
Hier ist das Format eines gekrümmten Ressourcenschutzmoduls:
{Zuweisung von Ressourcen}
versuchen
{Ressourceneinsatz}
Endlich
{Freigabe von Ressourcen}
Ende;
Versuchen Sie es mit dem oben Gesagten. . . Das Modul „finally“ ermöglicht es dem Programm, fi immer auszuführen
Schließlich ist jeder Programmcode im Abschnitt enthalten, auch wenn im geschützten Modul ein Fehler vorliegt
produziert in. Wenn ein Codeabschnitt im Try-Abschnitt bei der Ausführung einen Fehler verursacht, führen Sie ihn aus
Die Zeile springt direkt zum Abschnitt „finally“; wenn während der Ausführung keine Fehler auftreten
Programme werden in normaler Reihenfolge ausgeführt.
Im folgenden Codebeispiel für die Ereignissteuerung wird zuerst und dann Speicher zugewiesen
Es ist ein Fehler aufgetreten, aber der Programmcode, der den Speicher freigegeben hat, wurde trotzdem ausgeführt:
ProcedureTForm1. Button1Click(Sender:Tobject
);
Var
Zeiger1: Zeiger;
Integer1,Numzero:Integer;
beginnen
Numnull:Κ0;
GetMem(Pointer1, 1024); {1K Speicherressourcen zuweisen}
versuchen
Integer1: Κ5divNumzero; {Dieser Satz erzeugt einen Divisionsfehler
Fehler}
Endlich
FreeMem(Pointer1,1024);{Hier wird dieser Satz noch ausgeführt
OK}
Ende;
Ende;
Wie sichergestellt werden kann, dass das Programm die verwendeten Ressourcen freigibt, ist ein wichtiges Thema bei der Programmierung.
Dies ist ein sehr wichtiges Thema, das beim Programmieren geübt und beachtet werden muss.