1 
2 
3 #ifdef DEBUG
4   void *debug_malloc(size_t size, char *file, int line);
5   void debug_free(void *ptr, char *file, int line);
6   void debug_postmortem(void);
7   void free_foreign(void *ptr);
8   void *malloc_foreign(size_t size);
9   void *copy_and_free_for_malloc_debug(void *ptr, size_t size);
10   char *copy_and_free_string_for_malloc_debug(char* str);
11 
12 
13   #define free(ptr) debug_free(ptr,__FILE__,__LINE__)
14   #define mymalloc(size) debug_malloc(size, __FILE__, __LINE__)
15 #else
16   #define free_foreign free
17   #define malloc_foreign malloc
18   #define copy_and_free_for_malloc_debug(ptr,size) (ptr)
19   #define copy_and_free_string_for_malloc_debug(str) (str)
20   #define debug_postmortem() do_nothing(0)
21 
22 
23 #endif
24