使用未初始化的變數

int a; 
printf("%d", a);

變數 a 是具有自動儲存持續時間的 int。上面的示例程式碼試圖列印未初始化變數的值(a 從未初始化)。未初始化的自動變數具有不確定的值; 訪問這些可能會導致未定義的行為。

注意: 具有靜態或執行緒本地儲存的變數 (包括不帶 static 關鍵字的全域性變數)將初始化為零或其初始化值。因此以下是合法的。

static int b;
printf("%d", b);

一個非常常見的錯誤是不將用作計數器的變數初始化為 0.你可以向它們新增值,但由於初始值是垃圾,你將呼叫未定義的行為,例如在終端上的編譯中發出指標警告和奇怪的符號

例:

#include <stdio.h>

int main(void) {
    int i, counter;
    for(i = 0; i < 10; ++i)
        counter += i;
    printf("%d\n", counter);
    return 0;
}

輸出:

C02QT2UBFVH6-lm:~ gsamaras$ gcc main.c -Wall -o main
main.c:6:9: warning: variable 'counter' is uninitialized when used here [-Wuninitialized]
        counter += i;
        ^~~~~~~
main.c:4:19: note: initialize the variable 'counter' to silence this warning
    int i, counter;
                  ^
                   = 0
1 warning generated.
C02QT2UBFVH6-lm:~ gsamaras$ ./main
32812

以上規則也適用於指標。例如,以下結果導致未定義的行為

int main(void)
{
    int *p;
    p++; // Trying to increment an uninitialized pointer.
}

請注意,上面的程式碼本身可能不會導致錯誤或分段錯誤,但稍後嘗試取消引用此指標將導致未定義的行為。