is this a valid approach to aliasing?

Robert William Fuller hydrologiccycle@gmail.com
Tue Feb 12 23:22:00 GMT 2008


John Love-Jensen wrote:
> Hi Robert,
> 
> Can you just get rid of the void** for the items parameter (see below)?
> 
> --Eljay
> 
> #include <stdlib.h>
> 
> int reallocItems(
>   void* items,
>   int itemSize,
>   int* itemAlloc,
>   int numItems,
>   int newItems,
>   int itemHint)
> {
>   void* rcAlloc;
>   int emptyItems;
>   int allocItems;
> 
>   // for idempotence
>   allocItems = *itemAlloc;
> 
>   // will the new entries fit?
>   emptyItems = allocItems - numItems;
> 
>   if (newItems > emptyItems)
>   {
>     // allocate the number of entries needed or the hint, whichever is more
>     allocItems = numItems + newItems;
> 
>     if (itemHint > allocItems)
>     {
>       allocItems = itemHint;
>     }
> 
>     rcAlloc = realloc(items, allocItems * itemSize);
> 
>     if (rcAlloc)
>     {
>       *(void**)items = rcAlloc;
>       *itemAlloc = allocItems;
>     }
>     else
>     {
>       return -1;
>     }
>   }
> 
>   return 0;
> }

Would this circumvent the type system?  Is there still an alias problem 
with your suggestion, albeit without a warning?  I am not sure.

Rob



More information about the Gcc-help mailing list