2017-10-27: umschreiben
Diese Beschreibung ist außerhalb der üblichen Definition eines Null-Pointer-Fehler, aber es kann einen Null-Zeiger dennoch produzieren, obwohl häufigen Fehler produzieren, oder gar keine. Es gibt oft keinen Hinweis auf seine Existenz außer "wenn oder wann" das Programm nicht wie erwartet funktioniert. Dies liefert nicht-konventionelle Beispiele und Definitionen von potentiellen Quellen von Nullzeigerzuweisungsfehlern, anstatt ein herkömmliches Verständnis zu definieren, das eher ein Fehler in der Konvention als ein Fehler in der Programmierlogik ist.
Dieser Fehlertyp (nicht definiert oder null) ist viel seltener. Aber moderne Programmierung, Benchtop-Geräte wie ein Arduino, Raspberry PI, AMD oder andere Computer auf einem Chip-Programmierung gibt es in einer Vielzahl von Formen, von denen viele so einfach wie gestern sind, existiert dieses Problem heute noch und kann sogar auftreten in den anspruchsvollsten Systemen. Darüber hinaus sind Unternehmen, die ihre eigenen Variablen- oder Datenstrukturen aufbauen, wahrscheinlich auch die wahrscheinlichsten Leute, die dies heutzutage sehen. Die Absicht ist, Beispiele zu zeigen, die bei der Anerkennung helfen können.
Damit dies ein "Null" -Zeigerfehler ist, muss der zugewiesene Wert nur '0' oder 'Null' sein. Aber es wurde historisch ein 'Nullzeigerfehler' genannt, der nicht nur ein einfacher Nullzeiger ist; aber wegen ihres Auftretens beim Löschen oder Nullstellen eines Arrays überschreitet oder unterschreitet die Routine die Grenzen des Arrays. Es handelt sich jedoch einfach um einen Fehler, der durch Fehlberechnungen von Arraygrenzen verursacht wird und zu Nullzeigerzuweisungen und anderen Fehlern führen kann. Diese sind oft nicht leicht zu erkennen und erzeugen möglicherweise keinen sofortigen oder gar keinen Fehler, da die Adresse, auf die der Zeiger ursprünglich gezeigt hat, wenn er definiert wurde, einen unerwünschten Wert (eine schlechte Adresse) enthält. Und wann und durch was es überschrieben wurde, kann fast unmöglich zu finden sein. Dies ist Teil der Definition von Fehlertypen, die Nullzeiger erzeugen. Wo der Zeiger mit einer Null oder Null überschrieben wird und es wird einen Fehler erzeugen, und man bleibt mit dem Problem zu finden, was es geändert hat. Es muss besonders darauf geachtet werden, dass die Indizes korrekt berechnet werden, wobei die Option 0 oder 1 berücksichtigt wird. Außerdem wird beim Verschieben von Datenblöcken korrekt berechnet. Glücklicherweise können viele anspruchsvolle Entwicklungssoftware-Anwendungen und High-Level-Sprachen viele dieser Probleme vor oder während der Kompilierung erfassen, wenn der Typ des Variablenarrays explizit umgewandelt wird oder wenn das Programm in einer Laufzeitumgebung geschrieben werden kann und Array-Grenzen überwacht.
Ein Nullzeiger ist, wie in früheren Tagen definiert, jede Variable, die als Zeiger verwendet wird, und den Adressinhalt der Zeigeradresse, dh die Adresse, auf die der Zeiger zeigt, nicht die Position, auf die er zeigt oder null, ODER wurde modifiziert, ohne die Absicht oder das Wissen des Programmierers überschrieben, was ein Nullwert sein könnte, aber auch ein beliebiger anderer Wert sein könnte. Oft erstellt nur der Nullzeiger eine Fehlermeldung, obwohl der Code einen Fehler verursachen kann, da es sich häufig um Datenblöcke handelt, die Nullen enthalten, die an falschen Stellen gespeichert sind. Anstatt auf die ursprünglich definierte Adresse zu zeigen, in der sich die Daten befinden sollten, enthält sie jetzt eine Nulladresse oder eine unbekannte Adresse, die Daten an eine ungültige oder unerwünschte Stelle verschiebt und den Code oder die Daten dort beschädigt. Da der Fehler an den Daten oder der Code nicht sofort ausgeführt oder verwendet werden kann, wenn er in einen vorhandenen unbenutzten Speicherort verschoben wird, wenn der Code oder die Daten zu einem späteren Zeitpunkt des Laufs ein Problem verursachen, kann es keine Informationen geben an der "echten" Stelle des Fehlers, ob es Nullzeiger oder andere Verfälschungen erzeugt oder zuweist, verändert es den Code, und die Dinge können komisch werden, wirklich komisch.
Zusammenfassend ist ein Nullzeiger eine beliebige Nulladresse, die verwendet wird, um auf einen Speicherort zu zeigen, unabhängig davon, was sie erstellt. Ein Nullzeigerzuweisungsfehler oder viele andere Fehler können diesem Problem und diesem Beispiel zugewiesen werden.In einfacheren Architektur- oder Programmierumgebungen kann es sich auf jeden Code beziehen, der unbeabsichtigt Nullen als Zeiger erzeugt oder einen Fehler erzeugt, der die Ausführung in jedem Fall stoppt, wie das Überschreiben eines Bytes im Rückgabe-Stack, das Überschreiben von Code und das Setzen Code oder Daten am falschen Ort, nicht nur als Adresse. So, während die obigen Beispiele gut funktionieren, um ein Beispiel für einen Nullzeiger zu definieren. Also erweitern wir das Konzept, Ein Null-Zeiger ist ein beliebiger Zeiger, der als Variablenzeiger verwendet wird, und der Adressenort dieser Variablen aus einem von mehreren Gründen enthält jetzt einen "Null" oder irgendeinen unbeabsichtigten Wert, der auf einen unerwünschten Speicherort zeigt egal wie es dort hinkam.
So schließlich kann man einen Null-Zeiger-Fehler erhalten, und beim Untersuchen des Zeigers findet es eine Null enthält; aber, kann nicht den Code finden, der die Null in den Zeiger platziert oder zugewiesen hat. Dies ist eine breite Definition des Nullzeigerzuweisungsfehlers und ist das Worst-Case-Szenario eines Nullzeigerfehlers. Wenn das in einem großen Programm auftritt, kann das der Tod des Programms sein, da der Fehler unbemerkt bleibt, bis das Programm erweitert wird, wenn der Fehler zuvor existierte und wenn an den falschen Speicherort geschrieben wurde und jetzt kann der falsche Speicherort innerhalb des neuen Codes vorhanden sein und zufällige Fehler generieren. Zum Beispiel: Der schlechte Adressenwert bewirkt, dass Daten außerhalb des definierten Variablenraums geschrieben werden, bleibt aber für einige Zeit unbemerkt, weil er geschrieben wird und gelesen wird und alles "erscheint" OK! Aber das Programm erweitert sich, wird größer, neuer Code existiert im selben Adressraum wie der Speicher, in dem der ursprüngliche alte Fehler existierte, der Daten in den falschen Adressraum schreibt und niemand bemerkt, ob ein Byte oder ein ganzer Datenblock! Aber jetzt gibt es dort einen neuen Code. Und es wird durch den alten, unentdeckten Fehler korrumpiert, und der Fehler, der vor einem Jahr existierte, ist jetzt fast, wenn nicht vollständig, unmöglich zu finden. Die Logik des Administrators diktiert normalerweise, warum es dort aussieht, es lief und funktionierte im letzten Jahr gut. Aber jetzt, nichts funktioniert, große Stücke sind gebrochen, schauen und schauen und nichts finden Sie. Es ist, als ob der Fehler nicht existiert, und doch tut es das. Was verursacht es, wer Code vermutet, der Jahre zuvor geschrieben wurde? Es werden auch Nullzeiger und viele andere Fehler verursacht.
Vielleicht ist diese Antwort fehl am Platz und würde besser dazu dienen, an anderer Stelle aufgeführt zu werden. Moderator? Vielleicht gibt es Bedenken, weil diese "Antwort" nicht relevant ist, da es Bedenken gibt, das Wort "Zuweisung" in der Frage zu verwenden, dh absichtlich zugewiesen. Der Begriff der Zuordnung erfordert jedoch keine Kenntnis oder Zustimmung. Ein Algorithmus oder Code kann Werte zuweisen. Nullzeiger können auf viele Arten erzeugt werden, das Beispiel hier ist wahrscheinlich das üblichste außerhalb herkömmlicher Fehler.
Es scheint, dass diese Information 'a' Platz hat und hier als Antwort enthalten ist. Positive, fruchtbare Rückmeldungen oder Vorschläge werden eher geschätzt als einfache Abstimmungen. Wenn jemand etwas dazu sagen möchte, ist vielleicht eine Meta-Diskussion angebracht?
Prost.
http://www.faqs.org/qa/qa-3786.html – zaf