訪問超出已分配塊的記憶體

指向包含 n 元素的記憶體塊的指標只有在 memorymemory + (n - 1) 範圍內時才能被取消引用。取消引用該範圍之外的指標會導致未定義的行為。例如,請考慮以下程式碼:

int array[3];
int *beyond_array = array + 3;
*beyond_array = 0; /* Accesses memory that has not been allocated. */

第三行訪問陣列中的第 4 個元素,該元素只有 3 個元素長,導致未定義的行為。類似地,以下程式碼片段中第二行的行為也沒有很好地定義:

int array[3];
array[3] = 0;

請注意,指向陣列的最後一個元素並不是未定義的行為(此處定義了 beyond_array = array + 3),但取消引用它是(*beyond_array 是未定義的行為)。此規則也適用於動態分配的記憶體(例如通過 malloc 建立的緩衝區)。