buenas, pues al final lo resolví con lo que yo entiendo que es un parche, pero como solo es una herramienta de debug, me viene bien para la verificación y luego se quita para la release.
os pongo como lo he hecho:
#ifdef _DEBUG
#include <new>
void* operator new (size_t size, const char* file, int line, const char *);
void* operator new[] (size_t size, const char* file, int line, const char *);
void* operator new (size_t size);
#define DEBUG_NEW new(__FILE__, __LINE__,__FUNCTION__)
void operator delete (void * size);
void operator delete (void * size, const char* file, int line, const char *);
void operator delete[] (void * size, const char* file, int line, const char *);
#else
#define DEBUG_NEW new
#endif
me defino operadores new con varios argumentos, sin embargo no predefino los argumentos, sino que preparo la macro DEBUG_NEW para llamar a new con los argumentos indicados.
luego , para no tener que cambiar el codigo en el programa:
#include <gMemory.h>
#define new DEBUG_NEW
Con lo que mis new se convierten en DEBUG_NEW que es lo mismo que new(__FILE__,__LINE__,__FUNCTION__) con lo que cuando se llama a new, se llama a mi operador new sobrecargado. asi, cada vez que se localiza memoria, lo almaceno en un vector, y cuando se llama a delete, uso el puntero para buscarlo en mi lista y eleminarlo, con lo que al terminar la ejecución , los registros del vector me indican que localización de memoria no se liberó.
Los operadores delete de mas que defino son necesarios para que el compilador no produzca un error al no encontrar el delete correspondiente, aunque no hace falta, ya que con hacer delete del puntero, ya sabremos que registro del vector es el que se elimina.
Es un poco chapuza, pero da el pego. A mi objeto global MEMORY, le he puesto una variable para evitar la reentrancia al localizar nuevos registros y que no me marque estos como localizaciones de memoria. Me falta añadirle sincronización para multitarea.
que os parece?