Listing 1: memtrack.h
#ifndef MEMTRACK_H
#define MEMTRACK_H
#include <stdlib.h>
#define MEMTRACK_CALLOC(nelem, size) \
memtrackCalloc((nelem), (size), __FILE__, __LINE__)
#define MEMTRACK_FREE(ptr) \
memtrackFree(ptr, __FILE__, __LINE__)
#define MEMTRACK_MALLOC(size) \
memtrackMalloc((size), __FILE__, __LINE__)
#define MEMTRACK_REALLOC(ptr, size) \
memtrackRealloc((ptr), (size), __FILE__, __LINE__)
#define MEMTRACK_VALLOC(size) \
memtrackValloc((size), __FILE__, __LINE__)
#define MEMTRACK_STRDUP(str) \
memtrackStrdup((str), __FILE__, __LINE__)
#define MEMTRACK_STRCPY(dest, src) \
memtrackStrcpy((dest), (src), \
sizeof(dest), __FILE__, __LINE__)
#define MEMTRACK_STRCAT(dest, src) \
memtrackStrcat((dest), (src), \
sizeof(dest), __FILE__, __LINE__)
void* memtrackCalloc (size_t numElements, size_t elemSize,
char* fn, unsigned short fl);
void memtrackFree (void* ptr,
char* fn, unsigned short fl);
void* memtrackMalloc (size_t size,
char* fn, unsigned short fl);
void* memtrackRealloc(void* ptr, size_t size,
char* fn, unsigned short fl);
void* memtrackValloc (size_t size,
char* fn, unsigned short fl);
char* memtrackStrdup (const char* s1,
char* fn, unsigned short fl);
char* memtrackStrcpy (char* dest, const char* src,
size_t destSize, char* fn, unsigned short fl);
char* memtrackStrcat (char* dest, const char* src,
size_t destSize, char* fn, unsigned short fl);
/*memtrackCheckPeriodic checks for memory leaks if 'period' seconds
have elapsed since the last leak check.
It checks for corrupted end-of-block sentinels on each call.*/
void memtrackCheckPeriodic(int period);
#endif