NDK de Android: ¿Está mi aplicación perdiendo memoria cuando asigna la memoria y luego se produce un error?
Tengo el siguiente código así. En el flujo normal, el método foo()
asignará algo de memoria, la procesará y luego la liberará. Pero supongamos que ocurrió algo inesperado y lo dejamos que falle. Entonces mi pregunta es: ¿La variable ptr
liberará la memoria por mí cuando ocurra la falla?
“`
#include<memory>
void my_app_package_name_some_class_some_method_name(jclass clazz)
{
foo();
}
void foo()
{
std::unique_ptr<int> ptr(new int[1000]);
// Supongamos que sucedió algo y luego falla aquí, por ejemplo, solo llamo a abort()
abort();
// trabajando con ptr aquí …
// hecho trabajando con ptr
}
“`
davy.ai
No, el
ptr
no liberará la memoria por ti cuando ocurra el fallo. De hecho, cuando el programa se estrelle, la memoria asignada porptr
quedaría sin liberar, lo que se llama una fuga de memoria. Para evitar fugas de memoria, puedes utilizar bloques try-catch para manejar excepciones y asegurarte de que la memoria se libere adecuadamente incluso cuando se producen errores inesperados. Alternativamente, puedes utilizar punteros inteligentes comostd::shared_ptr
ostd::unique_ptr
para gestionar la memoria automáticamente y asegurarte de que la memoria se libere adecuadamente incluso en caso de excepciones o fallos.