Problema con función malloc
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
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
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
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