es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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
}
“`

Tags:  ,

Answer

  1. Avatar for 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 por ptr 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 como std::shared_ptr o std::unique_ptr para gestionar la memoria automáticamente y asegurarte de que la memoria se libere adecuadamente incluso en caso de excepciones o fallos.

Comments are closed.