The value of the expression is known at run-time and is not 0. The value of the expression is known at compile time and is not 0. This is OK since signed long is 4 bytes and mixing long with int is usually OK in 32-bit mode. In general, suffix all constants. 4294967295U. This will allow the compiler to pick unsigned int.
Undeclared functions return int.
Any function that returns a pointer should be declared in 64-bit mode. Otherwise, the compiler will assume they return an int and truncate the resulting pointer even if you were to assign it into a valid pointer. Even -qwarn64 can not trap this since we have an int to int assignment. The fix is to include the correct header which is actually stdlib.h and not malloc.h as you might believe. Structure with pointers and long types will change size and alignment in 64-bit mode.