C Grundkurs

Indexfehler

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Wenn der Index bei einem Zugriff auf Array-Elemente den erlaubten Bereich überschreitet, greifen Sie auf Speicherbereiche zu, die nicht für das Array vorgesehen sind. So eine kritische Situation sollten Sie tunlichst vermeiden!
04:13

Transkript

In diesem Video wollen wir uns Gedanken machen, was passiert, wenn Sie beim Zugriff auf Array-Elemente Indizes benutzen, mit denen irgendetwas nicht stimmt, im weitesten Sinne. Sie haben hier ein Array. Das hat die Größe 3. Also es können 3 Elemente in diesem Array gespeichert werden. Zumindest nach der Festlegung dieser Größe hier. Was passiert denn jetzt? Wenn Sie aber, beispielsweise, den Index 5 angeben, damit also auf das 6. Element dieses Arrays zugreifen wollen, - 0 indiziert, denken Sie dran, also 6. Element. Sie schreiben dort den Wert 1 rein. Jetzt sollte man erwarten, dass er Compiler einen Fehler erkennt und nicht übersetzt. Das machen viele moderne Sprachen so. Das ist ganz interessant, was jetzt hier in C passieren kann. Das ist auch nicht ganz konsistent. Aber wenn wir das jetzt einmal machen.. ...dann bekommen Sie den Wert 1. Schreibe ich hier die 10 rein, bekommen Sie den Wert 10. Und alles ist gut. Könnte man meinen. Das ist aber nicht so. Denn die Größe des Arrays ist hier überschritten. Für das Array wird ein gewisser Speicher Bereich zur Verfügung gestellt. Das kann man überprüfen, indem man eine Funktion SIZE aufnimmt. Das heißt... ich würde hier nicht A, sondern SIZEOF A einmal ausgeben. Und... ich gebe SIZEOF A auch nach Zuweisung eines Wertes zu einem Bereich, der eigentlich nicht mehr im Index-Bereich von dem Array liegt aus. Und wir schauen uns jetzt einmal beide Ergebnisse an. Sie sehen also, das Array ist am Anfang 12 Byte groß. Das liegt daran, dass auf meiner Plattform der Datentyp INT vier Byte braucht. Und dreimal 4 Byte sind 12. Wenn ich allerdings hier über die Array-Index-Grenzen hinaus einen Wert irgendwo hinschreibe, hat sich die Größe des Arrays an sich aber nicht geändert. Das heißt, irgendwo gibt es jetzt hier so einen Bezeichner: A mit einem Index 5. Und da steht irgend etwas Vernünftiges drin. Aber das ist eigentlich nicht der Bereich, der ursprünglich für das Array vorgesehen war. Kritisch wird die ganze Geschichte, wenn man in diesem Bereich,, der so zu sagen hinter dem Array liegt, bereits vorher irgendwelche wichtigen Informationen untergebracht hat. Denn die können in so einem Fall vernichtet werden. Sie werden möglicherweise überschrieben. Das heißt, auch wenn es vom Compiler her kein Problem ist, über die eigentlich vorgesehenen Grenzen eines Array hinaus zu schreiben, sollten Sie es tunlichst vermeiden. Das ist eine ganz kritische Situation. Eine andere Situation ist, wenn Sie jetzt hier gar nicht zuweisen, aber hier abfragen. Schauen wir uns das auch noch einmal an. Was bekommen Sie denn? Das ist ein Zufallswert. Oder genauer genommen, ist es der Wert, der genau hinter dem Array um so viele Bits verschoben wird, wie Sie im Index über die Grenze des Arrays hinaus zugreifen. Der Wert der dort steht. Und das ist eben irgendein zufälliger Wert, der von, möglicherweise, einem anderen Programmteil da hinein geschrieben wurde, oder gar noch nicht richtig initialisiert wurde. Auch das ist eine äußerst unangenehme Situation, eine sehr kritisch Situation. Sie sollten also, wie Sie an diesen Beispielen jetzt recht drastisch gesehen haben, auf jeden Fall die Grenzen eines Arrays beim Zugriff einhalten, weil Sie sonst in Bereiche kommen, wo Sie eben eine nicht kalkulierte Situation vorfinden. Sie können Dinge vernichten, die Sie brauchen. Sie können aber auch Werte ein leben, die eigentlich nicht vernünftig sind.

C Grundkurs

Lernen Sie das Syntaxkonzept von C von Grund auf kennen vor und sehen Sie, wie mit einer geeigneten Entwicklungsumgebung Programme Schritt für Schritt entstehen.

4 Std. 36 min (70 Videos)
Derzeit sind keine Feedbacks vorhanden...

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!