Everytime on C you have deal with memory, and very big part of bugs are memory managing related.
You must know differents ways to decide question with it, wrappers to general mmap/malloc/munmap/free functions, implement your own allocator (if you really know what you're doing).
Anyway, it's better to know without debugger (just use stdout to make this deal) when you are allocate and freed memory. GCC has a several really useful macros for this.
For example let's write a simple example with free() function:
void *__my_free(char *file,int line,char *function,void *p)
fprintf(stderr,"Trying to free nil pointer.\n");
fprintf(stderr,"At `%s:%d' via '%s'\n",file,line,function);
It's really a big shit deal to point everywhere info about function, line and file ;)
Just use this macro:
#define my_free(p) __my_free(__FILE__,__LINE__,(char *)__FUNCTION__,p)
This is all, for more detailed documentation see gcc manual.