Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

The only value that can be considered interchangeable between pointers and integers is the constant 0. Except in this case, conversions between integers and pointers can have undesired consequences depending on the implementation. According to the C standard [ISO/IEC 9899:2011]

An integer may be converted to any pointer type. Except as previously specified, the result is implementation defined, might not be correctly aligned, might not point to an entity of the referenced type, and might be a trap representation.

...

Code Block
bgColor#ccccff
langc
unsigned int *ptr = (unsigned int *) 0xcfcfcfcf;

Exceptions

INT11-EX1: A null pointer can be converted to an integer; it takes on the value 0. Likewise, a 0 integer can be converted to a pointer; it becomes the null pointer.

INT11-EX2: Any valid pointer to void can be converted to intptr_t or uintptr_t and back with no change in value. (This includes the underlying types if intptr_t and uintptr_t are typedefs, and any typedefs that denote the same types as intptr_t and uintptr_t.)

Risk Assessment

Converting from pointer to integer or vice versa results in unportable code and may create unexpected pointers to invalid memory locations.

...

CERT C++ Secure Coding Standard: INT11-CPP. Take care when converting from pointer to integer or integer to pointer

ISO/IEC 9899:2011 Section 6.3.2.3, "Pointers"

ISE/IEC TR 17961 (Draft) Converting a pointer to integer or integer to pointer [intptrconv]

...