Arrays in C werden zur Laufzeit nicht überprüft. Mit anderen Worten, Sie können ein Array der Größe N "definieren" und glücklich von dem Ende der Array-Grenze zugreifen. Wenn Sie über das Ende des Arrays hinausgehen, werden Sie Speicher irgendwo auf dem Stapel (oder dem Heap) löschen.
Sobald Sie irgendwo Speicher verloren haben, wird Ihr Programm wahrscheinlich abstürzen. Diese Abstürze können schwer zu finden sein, weil sie weit weg von dem Punkt, an dem Sie tatsächlich das Ende des Arrays überrannt haben, abstürzen könnten.
Normalerweise, wenn Sie Arrays in C deklarieren, ist es am besten, eine Art Konstante oder #define zu verwenden, um die Größe des Arrays zu markieren:
#define MAX_ELEMENTS 10
int array[MAX_ELEMENTS];
int cnt;
for(cnt = 0; cnt < MAX_ELEMENTS; cnt+=1) {
array[cnt] = cnt;
}
Wenn Sie Vergangenheit MAX_ELEMENTS im Array Zuordnung gehen, könnten Sie überschreiben Sie den Wert von cnt.Sie könnten eine andere Variable überschreiben. Alles hängt vom Compiler und der Codestruktur ab. Beachten Sie auch die Verwendung des <-Zeichens in der for-Schleife. C-Arrays sind 0-basiert, Sie müssen also prüfen, ob Sie weniger als und nicht weniger als oder gleich verwenden.
+1 für nasale Dämonen-Verteidigung! – RBerteig
@RBertig: Ich glaube nicht, dass "Fenstersturz" (Verteidigung ist kein Wort) bedeutet, was du denkst, was es bedeutet. Im Englischen wäre das der Akt, jemanden/etwas durch ein Fenster zu werfen. http://en.wikipedia.org/wiki/Defenestration –
Ein Tippfehler in der Tat, aber die Wortwahl war absichtlich. Ich griff nach etwas, das mit "Dämonen" aussprach, die die richtige Menge eines Gefühls unerwarteter Vertreibung hatten. Es war eine Strecke, und möglicherweise hinter dem Bruchpunkt der Metapher ;-) – RBerteig