#include #include int main() { char * cp = 0; unsigned int * uip = 0; unsigned int cp_size = sizeof(char *) * 8; unsigned int uip_size = sizeof(unsigned int *) * 8; printf("\n"); if ( cp = (char *)malloc( cp_size ) ) { printf(" malloc #1 succeeded, start is %u, size %u\n", &cp, cp_size); } else { printf(" malloc #1 failed!\n"); } if ( uip = (unsigned int *)malloc( uip_size ) ) { printf(" malloc #2 succeeded, start is %u, size %u\n", &uip, uip_size); } else { printf(" malloc #2 failed!\n"); } if ( cp ) { free(cp); } if ( uip ) { free(uip); } printf("\n"); return 0; } /* output on my system is: malloc #1 succeeded, start is 3217024436, size 32 malloc #2 succeeded, start is 3217024432, size 32 Q: Why does malloc #2 OVERLAP #1? Do I need to somehow "lock" my malloc-allocated memory? Any help would be greatly appreciated. */