访问超出已分配块的内存

指向包含 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 创建的缓冲区)。