"Fence Post Error" + String!?!?!?

Posted By: hack-panther

"Fence Post Error" + String!?!?!? - 03/23/08 17:42

Guten Tag

Ich habe hier ein kleinen Code mit einem extra eingebauten Fehler drin:
Code:

int Normaler_Array[#2];

function main()
{
if(Normaler_Array[2]>=1) //Falscher Array-Index wird abgefragt (Beabsichtigter "Fence Post Error")
{
sys_exit(""); //Bye Bye
}
}



Dieser Fehler wird nicht vom Compilierer gemeldet und
die IF-Schleife wird natürlich nicht ausgeführt.

Hier nochmal fast der selbe Code:
Code:

int Normaler_Array[#2];
STRING* Normaler_String = "#100"; //Unschuldiger String mit großer Auswirkung

function main()
{
if(Normaler_Array[2]>=1) //Falscher Array-Index wird abgefragt (Beabsichtigter "Fence Post Error")
{
sys_exit(""); //Bye Bye
}
}


Jetzt ist ein einfacher String dazu gekommen...
Was passiert wohl jetzt?
Dürfte doch eigentlich keine Auswirkung haben...

Aber doch...

Die IF-Schleife wird ausgeführt...

Durch den String bekam Normaler_Array[2] plötzlich den Wert 16001.


Ihr bekommt den Fehler jetzt schön zusammengefasst in 10 Zeilen zu sehen,
aber mir ist dieser Misst bei einem komplexen Code mit über 10.000 Zeilen
passiert und ich habe fast den ganzen Tag gebraucht um
herauszufinden woran es liegt.
Posted By: jcl

Re: "Fence Post Error" + String!?!?!? - 03/28/08 09:59

Das nennt man das "Garbage in, Garbage Out" Prinzip. Zugriff auf ein nichtexistierendes Array-Element liefert entweder einen Zufallswert zurück, oder eine Crash-Meldung.

Ihr "Fencepost" hat damit nichts zu tun - er wird vom Compiler schlicht ignoriert.
Posted By: hack-panther

Re: "Fence Post Error" + String!?!?!? - 03/28/08 11:22

Achso, wieder mal was dazugelernt...

Aber wieso entsteht dieser Zufallswert erst nach der String deklaration?
Ohne den String ist der Wert immer 0.

Ich würde eine Crashmeldung einem Zufallswert vorziehen,
aber leider ist dies wohl nicht möglich.

Das ist wirklich verhext wenn das in einem großen Code passiert,
aber nun weiß ich ja bescheid und bin was vorsichtiger bei den Arrays.
© 2024 lite-C Forums