邏輯錯誤 (程式設計)

在電腦程式設計中,邏輯錯誤(Logic error)(又叫語意錯誤)是程式錯誤的一種,這種錯誤會導致程式執行出錯,但還不至於崩潰。邏輯錯誤會產生意外的輸出或結果,但並不一定會立即被發現。

邏輯錯誤在編譯語言解釋語言中都可能出現。與語法錯誤的程式不同的是,邏輯錯誤的程式從語法上來說是正確的一段程式,但其執行結果卻與預期不符。[1]邏輯錯誤的唯一表現就是錯誤的執行結果。

在 C++ 語言中,邏輯錯誤是一種特殊的異常logic_error)。

常見原因

邏輯錯誤的原因可能是語句中出現了差錯(比如公式寫錯)、演算法中的錯誤,甚至是選擇了錯誤的演算法。此外還有一些其它原因,如類型轉換錯誤、變數作用域錯誤、遺漏的代碼段、對問題或需求的理解有誤等等。

除錯邏輯錯誤

找出邏輯錯誤的辦法之一,是將程式中的變數輸出到檔案或列印到螢幕,以定位錯誤所在。雖然這個辦法不是所有情況下都適用,比如在呼叫了錯誤的次常式時就行不通,但是如果程式由於計算結果有誤而出錯,這種方法最容易找出問題。

示範

以下用於計算平均數C語言函式含有邏輯錯誤。代碼中缺少了一對括號,因此程式雖然能夠通過編譯並執行,但由於運算子優先級(先乘除,後加減)的緣故,運算結果並不正確。

int average(int a, int b)
{
    return a + b / 2;     /* 应为 (a + b) / 2 */
}

參見

參考來源

  1. ^ 了解您的 Bug:三种编程错误. Microsoft. [2015-01-09]. (原始內容存檔於2016-05-29).