malloc is returning crazy pointer values ...

Q

malloc is returning crazy pointer values, I have included the line
extern void *malloc();
before I call it.

✍: Guest

A

malloc accepts an argument of type size_t, and size_t may be defined as unsigned long. If you are passing ints (or even unsigned ints), malloc may be receiving garbage (or similarly if you are passing a long but size_t is int).
In general, it is much, much safer to declare standard library functions by #including the appropriate header files, rather than typing extern declarations yourself. (A related problem is that it is not safe to print size_t values, including the result of sizeof, using printf's %d format. The portable approach is to use an explicit (unsigned long) cast, and %lu format: printf("%lu\n", (unsigned long)sizeof(int)).

2016-04-15, 444👍, 0💬