man malloc

Giorgos Keramidas keramida at
Thu Aug 18 12:48:07 GMT 2005

On 2005-08-18 12:08, Sergey Matveychuk <sem at> wrote:
>Chuck Swiger wrote:
>>>What is pointer coercion? I have no pointer before malloc() returns.
>> Right.  Well, malloc returns a (void *), but most people want to use the
>> memory malloc returns to hold their own arrays, structs, whatever, which
>> means that you need to be able to coerce the (void *) malloc gave you
>> into whatever pointer type you want to actually use.
>> So the memory malloc gives you needs to be aligned so that it's OK to be
>> used for even the most restrictive datatype known to the system,
>> commonly 8, 16, or 32 bytes.
> Pointer coercion means a type cast? I see now.
> I read it as 'force change of pointer value' before.

It may be surprising, but casting back and forth *MAY* change the value
of the pointer.  Think of something like ``memory models'' in MS-DOS and
pointers that have both two parts, i.e. a segment address and an offset
in the segment.  Add to this a weird rule that says segment values are
shifted up by 8 bits and then added to the offset value, mix a compiler
that uses optimizations in the cocktail too, and you get strange things :-)

More information about the freebsd-questions mailing list