/* * Descripcion: * Las funciones definidas en este fichero reemplazan a new y delete * de C++. Llevan una contabilidad de punteros a los que se asigna memoria * y de los que se libera memoria, provocando un core en caso de liberar * memoria que ya ha sido previamente liberada o que nunca se ha asignado. * * Su unica funcion es para depuracion. * * Basta compilar el programa principal que se quiere depurar lincando * con la libreria -lnew generada por este fichero. No es necesario * tocar fuentes ni recompilar librerias ya compiladas. -lnew debe ser * la ultima libreria en la lista de librerias al compilar. Por ejemplo * * CC programa.cc -llibreria1 -llibreria2 ... -lnew * * */ #include #include int Contador_Memoria = 0; // // Array maximo de punteros contabilzados. // #define MAXIMO_PUNTEROS 200000 int tabla[MAXIMO_PUNTEROS]; int tamanos[MAXIMO_PUNTEROS]; // // Operador new. La primera vez que se le llama inicializa el array de // punteros con todo a cero. // Cada vez que se le llama, crea la memoria pedida y devuelve el // puntero correspondiente. Guarda dicho puntero en el array en la // primera posicion vacia que encuentre. // void *operator new(size_t tamano) { static int Primera_Vez = 1; int i; void *p; if (Primera_Vez == 1) { for (i=0; i