ich versuche ein C-Programm zum Laufen zu bekommen. Es läuft auch, nur bringt Windows eine Fehlermeldung am Ende des Programmes. Mir ist mittlerweile auch klar, was das Problem ist: Der x-Array hat nur 5 Plätze frei, wird aber mit 6 Zahlen belegt. Ich frage mich nun eigentlich nur, warum es trotzdem funktioniert?? Auch der sechste Wert wird schön brav eingelesen und ausgegeben, obwohl es für diesen Wert ja eigentlich gar keinen „Platz“ geben dürfte? Der Quellcode lautet wie folgt:
/\* Das Programm soll gerade Werte in einem Array speichern und
nach Eingabe von 6 geraden Zahlen oder nach Eingabe der Zahl 99 beenden. \*/
#include
int main (void)
{
int x[5];
int k;
int i;
for (i=0; i
C-Anfänger dankt für Hinweise die zum besseren Verständnis von C beitragen.
thx
moe.
ich versuche ein C-Programm zum Laufen zu bekommen. Es läuft
auch, nur bringt Windows eine Fehlermeldung am Ende des
Programmes. Mir ist mittlerweile auch klar, was das Problem
ist: Der x-Array hat nur 5 Plätze frei, wird aber mit 6 Zahlen
belegt.
Das Arrays in C/C++ mit dem Indexwert ‚0‘ anfangen, ist bekannt ?
/* Das Programm soll gerade Werte in einem Array speichern und
nach Eingabe von 6 geraden Zahlen oder nach Eingabe der Zahl
99 beenden. */
#include
int main (void)
{
int x[5];
–> in ‚int x[4]‘ ändern
Moment, wird gleich mal unter SLES + Eclipse probiert
Das Programm läuft schon und ich weiß auch, dass die Fehlermeldung verschwindet, wenn ich statt x[5] x[6] verwende. Meine Frage ist, warum es aber auch mit x[5] funktioniert, obwohl ich dann einem 5er Array sechs Zahlen übergebe…
Wenn die Funktion ‚main()‘ fertig ist,
kehrt sie mit
call [return\_from\_main]
wieder an die Stelle zurück, von
der main() aufgerufen wurde.
Dieses klappt nicht, wenn die Adresse
überschrieben wurde, z.B. durch
x[5] = 42;
Dann kommt eine Fehlermeldung.
Übrigens: viele Compiler erzeugen einen
„Sicherheitsbereich“ von 64 (oder mehr)
bytes vor der (ersten) Variablel x[…],
den sie mit einem Bitmuster initialisieren
(z.B. 0xCCCCCCCC in Microsoft-C).
Nach dem Ende des Programms wird nun
geprüft, ob Du dieses Muster überschrieben
hast - wenn ja, bekommst Du einen
„exception error“ oder sowas ähnliches.