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
