Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Zeiger mit Null initialisieren

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
23.10.2005, 21:02 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


der VC definiert NULL so:


C++:
#define NULL 0




--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
23.10.2005, 21:48 Uhr
BT



nach eine weile habe ich das folgende über dieses thema gefunden :

Alle zeiger sollte man bei ihrer Erzeugung intialisieren. wenn man nicht weisst, was man dem
Zeiger zuweisen soll, wählt man einfach den wert NULL. Ein nicht initialisierte Zeiger ist so genannte wilder Zeiger. wie der name vermuten lässt, sind derartige Zeiger gefährlich.

Zeiger kann man auch mit 0 initialisieren:

Das Ergebnis ist das gleiche wie bei der initialisierung mit NULL, wobei aber aus
technischer sicht die 0 eine Ganzzahlkonstante und NULL eine Konstante für die
Adresse 0 ist.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
24.10.2005, 13:42 Uhr
dirweis



moment, langsam bitte, das interessiert mich jetzt aber doch.

Zitat:
Das Ergebnis ist das gleiche wie bei der initialisierung mit NULL, wobei aber aus
technischer sicht die 0 eine Ganzzahlkonstante und NULL eine Konstante für die
Adresse 0 ist.

meines bisherigen wissens nach zeigt ein zeiger mit NULL initialisiert auf überhaupt keine adresse, womit sicher gestellt wird, dass über den zeiger nicht in den speicher geschrieben werden kann. eben das ist ja die gefahr bei wilden zeigern, dass sie irgendwohin auf den speicher zeigen und dann eben auch dahin schreiben. das ist unter normalen betriebssystemen aber immer noch kein koller, da diese über speicherschutz verfügen und das programm eben mit einer entsprechenden fehlermeldung terminiert. das einzige bs, von dem ich weiß, dass der speicherschutz außen vorgelassen wurde, ist ms-dos - steht ja nicht umsonst für microsoft dirty operating system. mit der verschmelzung der gui windows 98 und dem betriebssystem windows nt auf windows 2000-ebene war dieses problem aber auch wieder aus der welt (wers glaubt).
oder ist es so, dass die adresse 0 tatsächlich als erste adresse im speicher auch physikalisch existiert und dort einfach nur der ganze müll hingeschrieben wird - vergleichbar mit /dev/null ?

beste grüße
--
main(){int x=0,y=1228443207;for(;x<105;++x,y=x<32?y:x<64?3392743058u:x<96?611502372:137)putchar((x+1)%21?y&1<<x?64:32:10);}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
24.10.2005, 14:08 Uhr
ao

(Operator)



Zitat von dirweis:
meines bisherigen wissens nach zeigt ein zeiger mit NULL initialisiert auf überhaupt keine adresse,

Eine Adresse, die keine Adresse ist? Mir ist kein System bekannt, auf dem die Adresse 0 physikalisch nicht existiert.
Ob und wie darauf zugegriffen werden kann, ist eine ganz andere Frage.
"Richtige" Betriebssysteme wie Windows NT (und Nachfolger) oder Linux verhindern den Zugriff durch ihr eigenes Speichermanagement. Manche CPUs haben einen Hardware-Speicherschutz, d.h. Zugriffe auf geschützte Adressbereiche führen zu einer Hardware-Exception. Das ist sinnvoll für Embedded-Systeme ohne oder mit "kleinem" Betriebssystem, bei denen die Einrichtung eines Software-Speicherschutzes sehr aufwändig wäre, so dass man hier mit einem System-Reset zufrieden ist.


Zitat:
mit der verschmelzung der gui windows 98 und dem betriebssystem windows nt auf windows 2000-ebene war dieses problem aber auch wieder aus der welt (wers glaubt).

Das kann man schon glauben.

Zitat:
oder ist es so, ... dass dort einfach nur der ganze müll hingeschrieben wird - vergleichbar mit /dev/null ?

Nein nein. Zugriffe auf 0x0 sind definitionsgemäß Fehler und dürfen als solche behandelt werden.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: