As the doctor would say, "don't do that".
Either AIX has odd integer sizes, or you're on a 64-bit system. Or perhaps both.
When you use functions that you haven't included headers for, the compiler's forced to guess what parameters the function takes and returns, and will guess they are all integers. This is often a good guess on most 32-bit systems, where int, long, and all pointers are the same size -- 32 bits. But 64-bit systems will have 64-bit pointers while still perhaps having 32-bit integers, causing pointers to get balled up and crammed through the mail slot, so to speak.
Without stdlib.h, the value malloc() gives you is corrupted, causing fread to crash when it uses it.
So, always include the headers! Just because it works 'this time' when you don't doesn't mean it will in all situations.