在閱讀this SO question的答案時,我瞭解到超出邊界的指針算術是未定義的。實際上,根據C99 6.5.6段落8釋放指針算術
如果 指針操作數兩者,並將結果指向相同 陣列對象的元素,或一個過去的陣列 對象的最後一個元素時,評估應不產生溢出; 否則,行爲是不確定的。
釋放該對象是否使該保證無效? 7.20.3.2「自由功能」似乎沒有提到它,只是提到「空間被釋放」。由於6.5.6特別提到了溢出問題,它看起來像是一個整數溢出問題,免費不會影響。算術是指向一個對象的指針是「引用它」的行爲?
換句話說,就是:
char *foo = malloc(10);
free(foo);
foo++;
不定?或者是「溢出」使用另一個?
釋放指針後,它不再指向數組。這就排除了「指向相同數組對象的元素」,當它沒有指向任何東西時。 – 2012-07-31 22:41:08