I programmering är ett logiskt fel en bugg som gör att programmet fungerar felaktigt, men inte kraschar programmet .
Logiska fel kan uppstå i både kompilatorer och tolkar . Till skillnad från syntaxfel är program med en logisk brist korrekta program, även om de i de flesta fall inte beter sig som ursprungligen avsett [1] .
Förekomsten av denna typ av fel är förknippad med felaktiga handlingar i beslutsfasen.
I C++ kallas ett speciellt undantag ( logic_exception ) även ett logiskt fel .
Fel kan associeras både med de enklaste stavfelen i skrivoperatorer och i ett förvirrande val av algoritmgrenar. Det finns också många andra orsaker: felaktig typ av casting , användning av en variabel utanför dess räckvidd , saknar ett kodfragment och en utvecklare som missförstår kraven.
Ett sätt att hitta den här typen av fel är att skriva ut listan med variabler i programmet (till en extern fil eller till skärmen). Även om den här metoden inte fungerar om felet är att anropa fel funktion , är det fortfarande den enklaste om den matematiska algoritmen inte är korrekt implementerad .
I det här exemplet är syftet med funktionen att returnera medelvärdet av de två givna talen. Felet ligger i underlåtenheten att ta hänsyn till operatörernas företräde (delningen i uttrycket beräknas före additionsoperationen) och frånvaron av parenteser av denna anledning.
int medelvärde ( int a , int b ) { returnera a + b / 2 ; /* korrekt notation (a + b) / 2 */ }