Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Zitat
Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.
sondern kontrolliert abstürtzt
Falsch. Ein Zugriff auf NULL-Speicher ist eben nicht undefiniert sondern führt zum Absturz. Mir ist auch noch nie untergekommen, dass dereferenzieren oder andere Pointeroperationen auf NULL nicht abgestürtzt wären. NULL steht eben für "kein gültiger Speicherbereich" und jede Laufzeitumgebung muss das mit einem Absturz quittieren - außer man fängt die Exception.Und genau da irrst du dich. Die Benutzung eines 0-Zeigers ist undefiniert. Dein Programm kann crashen oder ohne Probleme weiterlaufen. Beide Fälle passieren in der Regel auch.
Der Thread klingt so, als ob alle Smart-Pointer verwenden und in letzter Zeit nicht viel mit Pointern gemacht haben...Zitat
Die Aussagen in dem Thread mögen vielleicht so wirken, dass Zeiger nie 0
sein sollten, aber das ist wohl nicht gemeint, sondern man sollte sich
anders benutzen. Gemeint ist aber aber wohl hauptsächlich: Mach keine
manuelle Speicherverwaltung, sondern benutz Smart Pointer, passende
Container etc., etc.
Zitat von »8.3.2/4«
Note: in particular, a null reference cannot exist in a well-defined program, because the only way to create such a reference would be to bind it to the “object” obtained by dereferencing a null pointer, which causes undefined behavior.
Ein Zugriff auf NULL-Speicher ist eben nicht undefiniert sondern führt zum Absturz. Mir ist auch noch nie untergekommen, dass dereferenzieren oder andere Pointeroperationen auf NULL nicht abgestürtzt wären. NULL steht eben für "kein gültiger Speicherbereich" und jede Laufzeitumgebung muss das mit einem Absturz quittieren - außer man fängt die Exception.
Eine Ausnahme sind arithmetische Funktionen, dann rechnet man ja mit Integern und erzeugt einen theoretisch gültigen Zeiger.
Aber wie soll eine Funktion, die ein Objekt anlegen soll, anzeigen, dass es eben nicht geklappt hat? Jetzt sag nicht Exceptions...
Der Thread klingt so, als ob alle Smart-Pointer verwenden und in letzter Zeit nicht viel mit Pointern gemacht haben...
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (26.08.2012, 01:11)
Okay, mein Fehler, ich wollte eigentlich auf NULL-Speicherzugriffe hinaus - ich wollte auch schon editieren, aber ihr habt meinen Fehler sofort aufgedeckt.Zitat
drakon
Es wäre auch völlig hirnrissig Absturz vorzuschreiben, daher:
Undefiniertes Verhalten, weil jeder Compiler Hersteller in dem Fall
machen kann was er will.
Weil es immer wieder Projekte gibt, die vorschreiben, sie nicht zu verwenden. Und es gibt Compiler/Plattformen, die das gar nicht erst unterstützen...Zitat
dot
Wieso nicht?
Weil es immer wieder Projekte gibt, die vorschreiben, sie nicht zu verwenden. Und es gibt Compiler/Plattformen, die das gar nicht erst unterstützen...Zitat
dot
Wieso nicht?
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »dot« (26.08.2012, 01:56)
Ich meinte den schreibenden Zugriff:Nun, wir gingen davon aus, dass du den Zugriff auf ein Objekt über einen Nullpointer meinst. Oder was genau verstehst du unter einem "NULL-Speicherzugriff"?
C-/C++-Quelltext |
|
1 2 |
int *p = NULL; *p = 5; |
Werbeanzeige