在阅读这个 SO question的答案时,我了解到越界指针算法是未定义的。事实上,根据 C99 6.5.6 第 8 段
如果指针操作数和结果都指向同一个数组对象的元素,或者超过数组对象的最后一个元素,则计算不应产生溢出;否则,行为未定义。
释放该对象是否会使该保证失效?7.20.3.2 “The Free Function” 好像没提,只提“空间被释放”。由于 6.5.6 特别提到了溢出,这似乎是一个整数溢出问题,free 不会影响。对指向对象的指针的算术是“引用它”的行为吗?
换句话说,就是:
char *foo = malloc(10);
free(foo);
foo++;
不明确的?还是“溢出”的用法不同?