Nemo hat geschrieben:Xin hat geschrieben:
Hsmpf... ungenau. (jaja, ich weiß ich bin ein Korinthenkacker

)
Ein Korinthenhacker sozusagen

Genau ^^
Nemo hat geschrieben:Xin hat geschrieben:
Der Zugriff auf die Adresse 0 ist damit verboten und das Betriebsystem bricht das Programm ab, weil man in ein Speichersegment zugreifen möchte, für das einem die Rechte fehlen.
Warum gibt es überhaupt noch ein Speichersegment 0, könnte man nicht einfach mit 1 zu zählen beginnen, oder war das schon so gemeint?
Wenn Du eine Liste von Elementen hast, die Du durchzählen kannst, kommst Du häufig vor das Problem, dass ein Element als "ungültig" deklariert wird. Wenn Deine Liste noch leer ist, kommst als erstes das ungültige Element und erhält den Index 0.
Nun ist ein Speicherriegel kein wachsendes Array, sondern hat immer eine feste Größe. Die CPU kann aber schnell mit 0 vergleichen und daher ist die Speicherstelle 0 zwar da, wird aber in der Applikationsprogrammierung nicht benutzt. Man fängt bei Index 1 an, seine Daten zu schreiben (wobei Index 1 bei einer 32 Bit CPU eben gerne die Adresse 4 ist).
Nemo hat geschrieben:ufor hat geschrieben:Den Zeiger hab ich initial auf NULL gesetzt da ich mir dachte besser ein Zeiger auf NULL als er zeigt irgendwo hin.
Hierzu würde mich die Meinung der erfahreneren Programmierer interessieren. Schaden kann es ja kaum, die Frage ist, ob es wirklich etwas bringt.
Das ist eine Frage der Definition von "Schaden": Initialisieren von Variablen macht einen Algorithmus niemals falsch. Eher richtiger (falls man später irgendwo vergisst die Variable mit dem richtigen Wert zu setzen - nicht selten läuft's dann trotzdem). Ein richtiger Algorithmus setzt aber genau da und ausschließlich da, wo die Variable gesetzt werden muss, den Wert der Variable. Und zwar genau so oft, wie es sein muss und nicht häufiger.
Code: Alles auswählen
int a = 0;
if( condition() )
a = 1;
// a ist in keinem Fall willkürlich gesetzt
Dieser Code wird immer funktionieren, da a immer einen definierten Zustand hat. Der Algorithmus kann also nicht aufgrund einer fehlenden Initialisierung von a fehlschlagen. Trotzdem ist der Code wenn es um Effizienz geht nur zweitklassig, da a erst
immer auf 0 gesetzt wird und dann eventuell nochmal überschrieben wird. Wenn es überschrieben wird, braucht man es auch nicht zu initialisieren.
Code: Alles auswählen
int a;
if( condition() )
a = 1;
else
a = 0;
// a ist in keinem Fall willkürlich gesetzt
Oder kurz:
Code: Alles auswählen
int a;
a = condition() ? 1 : 0;
// a ist in keinem Fall willkürlich gesetzt
Oder speziell für diesen Fall in "tricky":
Code: Alles auswählen
int a;
a = condition() == true;
// a ist in keinem Fall willkürlich gesetzt
Oder more tricky:
Code: Alles auswählen
int a;
a = !!condition();
// a ist in keinem Fall willkürlich gesetzt
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.