Ett logikfel i programkoden är ett misstag som inte får programmet att krascha eller producera ett felmeddelande, men resulterar i att programmet ger felaktig eller oväntad utgång. Det är en brist i programmets design eller algoritm, vilket leder till felaktiga resonemang eller beräkningar.
Till skillnad från syntaxfel (som förhindrar att koden sammanställer eller körs) eller runtime -fel (som får programmet att krascha under körningen) är logikfel subtila och svårare att upptäcka eftersom programmet verkar köra normalt. Felet ligger i *vad *programmet gör, inte *hur *.
Här är några exempel för att illustrera:
* Fel beräkning: Ett program som är avsett att beräkna genomsnittet av tre siffror kan lägga till dem istället för att summera och sedan dela med tre. Programmet körs, men resultatet är fel.
* off-by-one-fel: En slinga kan upprepa en gång för många eller för få, vilket leder till felaktiga resultat eller åtkomst till data utanför matrisgränserna (även om den senare kan manifestera sig som ett runtime -fel beroende på språk och miljö).
* Felaktig villkorad logik: Ett "om" -uttalande kan ha ett villkor som inte exakt återspeglar den avsedda logiken. Att till exempel använda `>` istället för `> =` kan leda till att utesluta ett nödvändigt fall.
* oändlig slinga: En slinga som aldrig avslutas eftersom dess utgångsvillkor aldrig uppfylls. Även om detta kan verka som ett runtime -fel, är det i grunden ett logikfel i slingans design.
* Felaktig användning av variabel: Att använda fel variabel, eller av misstag överskriva en variabel för tidigt kan det leda till oväntade resultat.
Logikfel är ofta den svåraste typen av fel att hitta och fixa eftersom de kräver noggrant att undersöka programmets algoritm och flöde för att identifiera källan till det felaktiga resonemanget. Felsökningstekniker som att använda utskrifter (för att inspektera variabla värden på olika punkter) eller att använda en felsökare (för att gå igenom kodlinjen för rad) är viktiga för att hitta och lösa logikfel.