[comp.std.c] Pointer comparison question

Jeffrey_J_Vanepps@cup.portal.com (07/24/88)

[]

K&R says that you can't reliably compare pointers to one another unless
they both point into the same array. But later they do just that in a
storage allocator. Is this a real discrepancy or am I hallucinating?

I found this because I had to replace the malloc/free functions of
Microsoft C 5.0. Free() does not join adjacent free blocks to form
larger free blocks, and we were suffering fragmentation. Implementing
K&R's malloc/free required casting pointers to (unsigned long) so
they could be compared (it saw some of the pointers as negative when
addresses got up into the 7Fxx:xxxx range).
			  ^^^^^^^^^
			       that's right, ugly segmented address space.

Anyway, I just wondered about the apparent self-contradiction, and if
there was a better way to do this.

	    Jeff Van Epps
	    Jeffrey_J_Vanepps@cup.portal.com

P.S. My sympathy to anyone who is forced to work with either DOS or
     segmented architectures.

henry@utzoo.uucp (Henry Spencer) (07/26/88)

In article <7613@cup.portal.com> Jeffrey_J_Vanepps@cup.portal.com writes:
>K&R says that you can't reliably compare pointers to one another unless
>they both point into the same array. But later they do just that in a
>storage allocator. Is this a real discrepancy or am I hallucinating?

For "reliably", read "portably".  Storage allocators are non-portable by
definition, as you have discovered.
-- 
MSDOS is not dead, it just     |     Henry Spencer at U of Toronto Zoology
smells that way.               | uunet!mnetor!utzoo!henry henry@zoo.toronto.edu