このSOの質問に対する回答を読んでいるときに、範囲外のポインター演算が定義されていないことを学びました。実際、C996.5.6パラグラフ8によると
ポインタオペランドと結果の両方が同じ配列オブジェクトの要素を指している場合、または配列オブジェクトの最後の要素を1つ過ぎている場合、評価によってオーバーフローが発生することはありません。それ以外の場合、動作は定義されていません。
そのオブジェクトを解放すると、その保証が無効になりますか?7.20.3.2「自由機能」はそれについて言及していないようで、単に「スペースの割り当てが解除されている」と述べています。6.5.6はオーバーフローについて具体的に言及しているため、整数のオーバーフローの問題のように見えますが、freeは影響しません。オブジェクトへのポインタの算術は「それを参照する」行為ですか?
言い換えれば、次のとおりです。
char *foo = malloc(10);
free(foo);
foo++;
未定義?それとも、「オーバーフロー」の使用法は別のものですか?