On 17/03/12 00:14, I Rattan wrote: > Under Linux with gcc version 4.4.6 (Debian 4.4.6-11) > > The following code: > > int main(int argv, char** args) > { > int *arr; > int n; > > n = 10000000; > > arr = (int *)malloc(4*n); > free((void *)&arr); > exit(0); > } > > generates warning: > > err.c:14: warning: attempt to free a non-heap object 'arr' > > any ideas? > > -ishwar arr is already a pointer. &arr is the storage of the pointer in the stack. Thus the warning is perfectly valid. Your code is wrong. You don't need to cast the free() parameter or the malloc() return value in C. I suspect malloc() isn't prototyped, and gcc is assuming malloc() returns int. That can have catastrophic results on systems such as 64 bit Linux. You should #include <stdlib.h>, which provide malloc() and free() prototypes (as well as exit).