Die Nachteile der Zeiger in C

November 17

Die Nachteile der Zeiger in C

In der Programmiersprache C speichern Zeigern Adressinformationen für Speicherbereiche in den Computer. Sie ermöglichen auch ein Programm erlauben Frag den Computer für Speicher (oder "zuweisen" Speicher) während der Ausführung. Weil Speicher dynamisch Zeiger beschäftigen, sie kommen mit bestimmten Gefahren und Nachteile trotz deren Notwendigkeit.

Speicherlecks

Wenn ein Programm Speicher durch den Einsatz eines Zeigers anfordert, muss diesen Zeiger kontinuierlich den reservierten Speicherbereich verweisen. Wenn jederzeit eine Lage von reservierten Speicher nicht hat einen entsprechenden Zeiger (wenn alle Zeiger auf den Speicher "an anderer Stelle hingewiesen werden"), kann der Speicher nicht mehr vom Programm zugegriffen werden. Dieser Speicher ist jetzt "verwaist." Der Computer hält allerdings noch diese reservierten Speicher. Wie ein Programm ständig läuft, und die gleichen Zeilen Code ausgeführte millionenfach sind, kann im Speicherreservierung durch einen Zeiger Fehler ein Fehler schnell verfügbaren Arbeitsspeicher mit unzugänglichen Daten, verursacht einen Speicherverlust gefüllt.

NULL-Zeiger

Zeiger, die nicht auf eine Adresse im Speicher beziehen, werden als "null" Zeiger bezeichnet. Während sie in der Programmierung (z. B. Arbeitsspeicher-Reservierungsfehler anzeigt) nützliche Funktionen dienen, tritt ein großes Problem, wenn "dereferenzieren" einen null-Zeiger (dereferenzieren, ein Zeiger bedeutet Zugriff auf die Daten an die Speicheradresse, auf die der Zeiger verweist). Wenn ein Programm geschrieben wird, behandeln keine Sicherheitsüberprüfungen, die Dereferenzierung von null-Zeiger. In der Tat ein großes Programm kann nur versehentlich Dereferenzieren einen null-Zeiger, irgendwo tief in Millionen Codezeilen. Wenn der Code ausgeführt wird, wird ein null-Zeiger dereferenzierter jedoch ein Programm zum Absturz führen.

Pufferüberlauf

Ein Speicher-Überlauf (oder "Buffer Overflow") tritt Wenn durch einen Zeiger reservierten Speicher nicht groß genug für die Eingabe, die es empfängt. Wenn ein Programm Speicher für ein Wort sieben Zeichen bestehen reserviert und als Eingabe ein Wort neun Zeichen lang erhält, werden die zusätzlichen zwei Zeichen im Speicher außerhalb der sieben Zeichen Zeiger-Speicher gespeichert. Die zusätzlichen zwei Zeichen überschreiben nichts darin enthaltenen. Es gibt keine Möglichkeit, damit das Programm weiß, was in diesen zusätzlichen zwei Speicherplätze vorhanden ist. Diese könnten sensible Daten für das Programm (z. B. Programmvariablen) oder sogar für den Computer selbst enthalten. Dies führt zu "Daten Korruption", da Daten, die außerhalb der reservierten Speicher intakt gewesen sein sollte jetzt gefährdet ist.