Fence post errors e Visual Studio
Dicesi "Fence post errors" quegli errori comuni nella gestione errata di un array,nella fattispecie quando assegniamo un valore ad un indice dell'array fuori dai suoi limiti. Esempio pratico:
long TargetArray[25]; // array to fill
TargetArray[25] = 20; // out of bounds!!
Nell'esempio soprastante,Visual Studio farà tranquillamente l'asseegnamento e stamperà pure 20 in fase di esecuzione. Qualcuno un po' più perito di me in C++ e Visual Studio 2005,mi chiarisce perchè Visual Studio non lancia errori o avvertimenti di sorta ma tratta un array quasi come fosse uno stack? Grazie.
11:10
|
Categorie:
c++
|
This entry was posted on 11:10
and is filed under
c++
.
You can follow any responses to this entry through
the RSS 2.0 feed.
You can leave a response,
or trackback from your own site.
Iscriviti a:
Commenti sul post (Atom)
4 comments:
il problema non è il linguaggio (c++) o visual studio, bensì il fatto che il fencepost error è un errore logico, e il compilatore non segnala (ovviamente) gli errori logici, in quanto in fase di compilazione viene solo controllata la sintassi, insieme al controllo delle varie classi, se sono piu file, etc...
Gli errori logici, in C soprattutto, molto simili a questi ma SOLO nel meccanismo, sono quelli che possono portare ad attacchi di tipo buffer overflow, ma questa è un'altra storia....
In visual studio cmq puoi attivare il debug passo-passo, ma sicuramente lo consoci gia, e impostare il punto d'interruzione proprio nelle due righe segnalate... cosa accade?
@Teo: in java la JVM avrebbe lanciato un'eccezione,qui non succede nulla,nè in fase di compilazione nè in fase di esecuzione.
a me non lo fa, x quello ti dicevo che mi sembrava strano.. cmq non è che c'entra qlcs quello che viene detto qui http://tinyurl.com/2h5b4s ?
lì sì parla di una situazione in cui il mex appare, ma poi con una patch non appare più.... non è che forse hai una versione di d.s. che non mostra quel tipo di eccezioni?
certo, è strano che cmq ti fa visualizzare il num 20, se cosi dici!
come se l'array parte da 1 e non da zero !!
non d.s. pardon intendevo v.s. ovvero visual studio ;)
Posta un commento