Problema con función malloc

Roger
02 de Septiembre del 2009
Hola a todos

Tengo un problema/duda con la función malloc().

Como ejemplo:

Ttengo una clase A con un método R que llama a la función malloc(sizeof(algo)) para reservar un espacio en memoria, y NO utilizo después la función free en ese método para liberarla.

Declaro una clase B y en uno de sus métodos declaro una instancia de la clase A sin usar new() y llamo al método R. Al ser una variable local la instancia de la clase A, ¿al terminar su ejecución el método de la clase B el espacio en memoria reservado por malloc se libera?

Pregunto pq estoy teniendo problemas por falta de memoria y creo que esta pudiera ser la causa

Gracias de antemano

Roger



franciscorogles
02 de Septiembre del 2009
Cuando reservas espacio en memoria con malloc(), la memoria reservada no se libera a no ser que la liberes específicamente con free(). Ademas, si la asignacion se hace a una variable local, al destruirse esta (por ejemplo, al salir de la funcion donde se ha generado) la memoria no se libera, pero ya no hay modo de acceder a ella. Si llamas muchas veces a la funcion donde ocurre esto, llega un momento en el que te quedas sin memoria disponible. Por ello, te sugiero:

1. Cuando hagas una reserva de memoria, ya sea con malloc(), con new(), o con lo que sea, ten siempre en mente la llamada a la funcion correspondiente para liberar la memoria reservada.
2. Siempre que sea posible, libera la memoria reservada en orden inverso a su reserva. Es decir, si has reservado A, B, C por ese orden, intenta liberarla en orden C, B, A. Esto ayuda (aunque no garantiza) a prevenir la fragmentacion de la memoria disponible.

Aunque un poco tarde (acabo de encontrar este foro), espero que te sirva de ayuda.

Un saludo,
PACO