Is it undefined behavior to form a pointer range from a stack address?

后端 未结 6 1572
走了就别回头了
走了就别回头了 2020-12-20 15:47

Some C or C++ programmers are surprised to find out that even storing an invalid pointer is undefined behavior. However, for heap or stack arrays, it\'s okay to store the a

6条回答
  •  醉酒成梦
    2020-12-20 16:11

    This is allowed, the behavior is defined and both begin and end are safely-derived pointer values.

    In the C++ standard section 5.7 ([expr.add]) paragraph 4:

    For the purposes of these operators, a pointer to a nonarray object behaves the same as a pointer to the first element of an array of length one with the type of the object as its element type.

    When using C a similar clause can be found in the the C99/N1256 standard section 6.5.6 paragraph 7.

    For the purposes of these operators, a pointer to an object that is not an element of an array behaves the same as a pointer to the first element of an array of length one with the type of the object as its element type.


    As an aside, in section 3.7.4.3 ([basic.stc.dynamic.safety]) "Safely-derived pointers" there is a footnote:

    This section does not impose restrictions on dereferencing pointers to memory not allocated by ::operator new. This maintains the ability of many C++ implementations to use binary libraries and components written in other languages. In particular, this applies to C binaries, because dereferencing pointers to memory allocated by malloc is not restricted.

    This suggests that pointer arithmetic throughout the stack is implementation-defined behavior, not undefined behavior.

提交回复
热议问题