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 '''fencepost'''; la risposta corretta è infatti (''n'' – ''m'') + 1.
 
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 "Staccionatastaccionata", chiamato anche '''telegraph pole''', '''lamp-post''' o '''picket fence''') è un tipo specifico di errore di off-by-one. Una descrizione primitiva di questo errore apparve nei testi di [[Marco Vitruvio Pollione|Vitruvio]].<ref>{{Cita web|url=http://www.dsm.fordham.edu/~moniot/Opinions/fencepost-error-history.shtml|titolo=History of fence-post error|sito=www.dsm.fordham.edu|lingua=en|accesso=2017-11-04}}</ref>. Il problema si può illustrare nel modo seguente:
 
{{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 ==
* [[Semantica (informatica)|Semanticaformale]]
* [[Asserzione (informatica)|Asserzione]]
* [[Ciclo for]]
* [[Sicurezza informatica]]
 
== Collegamenti esterni ==
* {{Cita web|url=http://foldoc.org/fencepost_error|titolo=Fencepost error}}
* {{Cita web|autore=Edsger Wybe Dijkstra (|data=2 Maggiomaggio 2008). [|url=https://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html "|titolo=Why numbering should start at zero (EWD 831)"]. |sito=Archivi ''E. W. Dijkstra''. |editore=[[Università del Texas a Austin|Università di Austin in Texas]]. Informazioni recuperate il 3 Marzo 2011.}}
 
{{Portale|informatica}}
 
 
[[Categoria:Terminologia informatica]]
[[Categoria:Sicurezza informatica]]
== Note ==
<references />
* Una versione precedente di questo articolo è disponibile alla voce [[foldoc:fencepost error|fencepost error]] su [[foldoc:|FOLDOC]], utilizzato con i relativi [[:en:Wikipedia:Foldoc_license|permessi]]
* 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.