![]() |
![]() |
Ausnahmebehandlungen
|
G.Eichelsdörfer
Staatliche Technikerschule Weilburg |
Es erfordert einige Sorgfalt und ein gewisses "Sicherheitsdenken", um mögliche Ausnahmen im Ablauf eines Programms herauszufinden. Aus diesem Grund müsste eine Übung zu diesem Thema Sie in verschiedene Situationen versetzen (Rollenspiel) und Sie dazu auffordern, herauszufinden, was aus welchen Gründen alles schief gehen kann. Dies sollen Sie auch in späteren Arbeiten berücksichtigen. Die möglichen Ausnahmen werden in dieser Übung vorgegeben. Sie sollen an dieser Stelle das "Handwerk" zur Anwendung der Syntax üben.
DoubleArray
Wenn nicht mehr genügend zusammenhängender Arbeitsspeicher frei ist, schlägt die Allokation von Speicher fehl. In aktuellen C++-Compilern wirft in diesem Fall der new-Operator eine Ausnahme vom Typ std::bad_alloc>, welche eine nicht gelungene Speicherallokation aufzeigt.
Arbeitsbereich: klassen, Projekt: doublearray
Nehmen Sie an der bereits erstellten Klasse folgende Änderungen vor und testen Sie diese durch eine geeignete Ausnahmebehandlung in der main-Funktion:
Erweitern Sie die main-Funktion um einen try-Block und ein geeignetes catch, damit die Ausnahme bei fehlgeschlagener Speicherallokation verarbeitet wird.
Der Konstruktor soll eine Ausnahme werfen, wenn die importierte Kapazität negativ ist.
append()
soll kein Resultat liefern (void) sondern im Fehlerfall eine Ausnahme werfen.
Die entsprechende Ausnahme soll vom neu zu definierenden Structtyp DoubleArrayException
sein.
Dieser soll die folgenden Komponenten besitzen:
Hinweis:
Der Destruktor braucht einen ggf. vorliegenden Fehler bei der Speicherallokation nicht zu berücksichtigen,
weil der NULL-Zeiger hinter dem delete-Operator einfach nichts bewirkt.
DoubleArray
finden und werfen lassen
Stellen Sie möglichst viele relevante Ausnahmen zusammen!
Ermitteln Sie, in welchen Methoden oder Konstruktoren sich welche Ausnahmen ereignen!
Erweitern Sie diese Methoden/Konstruktoren um ein geeignetes Werfen einer Ausnahmeinformation!
Diese Übung können sie nur bearbeiten, wenn Sie am CGI-Kurs teilnehmen oder teilgenommen haben.
Im CGI-Projekt "decode" sind die beiden Funktionen hexDigitValue()
und decode()
zu erstellen.
Geeignete Lösungsquelltexte liegen vor.
Erweitern Sie beide Funktionen um das Werfen von geeigneten Ausnahmeinformationen!
Erweitern sie die main-Funktion dieses Projektes um eine passende Ausnahmebehandlung!
Betten Sie die Fehlerausgabe in korrekten HTML-Code ein!
Empfehlung für das Testen der Ausnahmebehandlung:
Legen Sie einen fehlerhaften CGI-String in einer Datei ab und lenken Sie zur
Programmausführung das Einlesen auf diese Datei um.
Beispiel:
Fehlerhafter String: Tierart=K%E4nguruh&Name=Skippy&geboren=199%3
Fehlerausgabe:
...
<html>
<head><title>Tierdaten</title></head>
<body>
<h1>Verarbeitung von Tierdaten</h1>
<p>
Fehler: Hexadezimalcodierung unvollständig<br>
CGI-Daten:<br>
Tierart=K%E4nguruh&Name=Skippy&geboren=199%3
</p>
</body>
</html>