Boost logo

Boost :

From: Dan Gohman (dgohman_at_[hidden])
Date: 2002-08-07 12:53:30

As a solution to asserts on pointers with 64-bit platforms, I've used
a function like the following:

 bool is_dereferenceable_pointer(void const* p)
#if some_specific_platform
    unsigned long v = reinterpret_cast<unsigned long>(p);
       v != -1ul // -1 is sometimes used as a special non-dereferenceable
                   // pointer value, for example in the return value of mmap
       v >= 0x1000 // Many platforms define specific address ranges
                   // for valid pointers.
    // For platforms without a custom check defined, we
    // just check for NULL.
    return p != 0;

 assert(is_dereferenceable_pointer(p)); // for some pointer p

In addition to avoiding warnings with 64-bit pointers, it is
more readable IMHO than `assert(p != 0)' and it can be more
aggressive on platforms with documented address spaces.

On MIPS/IRIX, for example, pointer values start at 0x400000 and
go to 0x80000000 in 32-bit ABIs and 0x10000000000 in 64-bit ABIs.


Dan Gohman

Boost list run by bdawes at, gregod at, cpdaniel at, john at