Off-by-one error: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m rimossa ripetizione |
fix sezioni finali |
||
Riga 3:
== Iterazioni oltre il termine dell'array ==
Consideriamo un [[array]] di oggetti, dei quali processare quelli compresi da un certo valore ''m'' ad uno ''n'' (estremi inclusi). Quanti elementi si trovano in questo range? Una risposta intuitiva potrebbe essere ''n'' – ''m'', ma questo è proprio un errore di off-by-one, più precisamente del tipo
Proprio per via di questa contro-intuitività, i range nell'informatica sono spesso rappresentati da [[Intervallo (matematica)|intervalli]] semi-aperti; il range da ''m'' ad ''n'' inclusivo infatti, è rappresentato dagli elementi che vanno da ''m'' (incluso) ad ''n'' + 1 (escluso), proprio per evitare errori di fancepost. Per esempio, un [[Iterazione|ciclo]] che itera cinque volte (da 0 a 4 incluso) può essere scritto come un intervallo semi-aperto da 0 a 5:<syntaxhighlight lang="c">
Riga 20:
== Errore fencepost ==
[[File:Fencepost error.svg|miniatura|Una recinzione dritta con ''n'' sezioni ha ''n'' + 1 paletti]]
Un '''errore fencepost''' (letteralmente "
{{Quote|Se costruisci una recinzione dritta lunga 30 metri, con paletti spaziati 3 metri l'uno dall'altro, di quanti paletti necessiti?}}
Riga 55:
Un approccio utile per cercare di prevenire alcuni problemi è usare varianti di queste funzioni, che calcolino quanto scrivere basandosi sulla lunghezza totale del buffer, piuttosto che sul massimo numero di caratteri da scrivere. Queste possono essere funzioni come la <code>strlcat</code> e <code>strlcpy</code>, spesso considerate più sicure perché rendono più facile prevenire scritture accidentali oltre la fine del buffer (nell'esempio di codice riportato sopra, chiamare <code>strlcat(buf, s, sizeof(buf))</code> risolverebbe il problema)
== Note ==▼
<references />▼
== Voci correlate ==
*
* [[Asserzione (informatica)
* [[Ciclo for]]
* [[Sicurezza informatica]]
== Collegamenti esterni ==
* {{Cita web|url=http://foldoc.org/fencepost_error|titolo=Fencepost error}}
* {{Cita web|autore=Edsger Wybe Dijkstra
{{Portale|informatica}}
[[Categoria:Terminologia informatica]]
[[Categoria:Sicurezza informatica]]
▲== Note ==
▲<references />
▲* Edsger Wybe Dijkstra (2 Maggio 2008). [https://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html "Why numbering should start at zero (EWD 831)"]. Archivi ''E. W. Dijkstra''. [[Università del Texas a Austin|Università di Austin in Texas]]. Informazioni recuperate il 3 Marzo 2011.
|