Dav*_*ave 3 c pointers language-lawyer
在阅读这个SO问题的答案时,我了解到越界指针算法是未定义的.的确,根据C99 6.5.6第8段
如果指针操作数和结果指向相同的数组对象,或一个过去的数组对象的最后一个元素的元素两者,所述评估也不得产生溢出; 否则,行为未定义.
释放该对象会使该保证无效吗?7.20.3.2"自由功能"似乎没有提及它,只是提到"空间被解除分配".由于6.5.6特别提到溢出,它似乎是一个整数溢出问题,free不会影响.指向对象的指针是否是"引用它"的行为?
换句话说,是:
char *foo = malloc(10);
free(foo);
foo++;
Run Code Online (Sandbox Code Playgroud)
未定义?或者"溢出"的用法是不同的?
C99§6.2.4说:
当指向的对象到达其生命周期的末尾时,指针的值变得不确定.
§7.20.3描述了分配对象的生命周期,如下所示malloc()
:
分配对象的生命周期从分配延伸到解除分配.
所以,从形式上讲,指针的值在foo
变为不确定之后free()
,因此不再可以说是指向任何对象.因此,增量的行为是不确定的.
归档时间: |
|
查看次数: |
200 次 |
最近记录: |