指標的加法或減法沒有正確限制

以下程式碼具有未定義的行為:

char buffer[6] = "hello";
char *ptr1 = buffer - 1;  /* undefined behavior */
char *ptr2 = buffer + 5;  /* OK, pointing to the '\0' inside the array */
char *ptr3 = buffer + 6;  /* OK, pointing to just beyond */
char *ptr4 = buffer + 7;  /* undefined behavior */

根據 C11,如果將指標新增或減去陣列物件和整數型別會產生一個不指向或超出同一陣列物件的結果,則行為是未定義的(6.5.6) )。

此外,取消引用指向陣列之外的指標自然是未定義的行為 :

char buffer[6] = "hello";
char *ptr3 = buffer + 6;  /* OK, pointing to just beyond */
char value = *ptr3;       /* undefined behavior */