c++ - OpenSSL:: SSL_library_init() pérdida de memoria
windows memory-leaks (4)
Recientemente comencé a estudiar sobre fugas de memoria en C ++, por lo que puedo hacer preguntas ingenuas.
Tengo una biblioteca de C ++ que está usando OpenSSL - mi tarea es verificar si hay pérdidas de memoria en esta lib. He ejecutado el Visual Leak Detector para verificar fugas de mem.
Veo que las llamadas a SSL_library_init();
y SSL_load_error_strings();
están liderando la fuga - Google rápido está mostrando que al final del uso tengo que llamar a los siguientes:
CONF_modules_free();
ERR_remove_state(0);
ENGINE_cleanup();
CONF_modules_unload(1);
ERR_free_strings();
EVP_cleanup();
CRYPTO_cleanup_all_ex_data();
La fuga efectivamente disminuyó, pero aún hay dos filtraciones (que la herramienta VLD me muestra) que ocurren porque la llamada SSL_library_init
.
¿Alguien sabe qué más tengo que hacer para liberar todas las fugas de mem?
Como entiendo, toda la memoria asignada durante SSL_library_init()
y SSL_load_error_strings()
se almacenan en variables globales y, por lo tanto, se incluye en la categoría de "Memoria en uso" en la categoría de pérdida de memoria, ya que la memoria aún está accesible cuando el programa está muriendo.
Una sugerencia es que se debe llamar a ERR_remove_state(0)
en cada subproceso donde se usa SSL, porque cuando se llama al ERR_remove_state
con el argumento 0, simplemente borra el estado de error para el subproceso actual. Otras llamadas me parecen buenas. Si pudiera publicar, "dos filtraciones" que VLD sigue mostrando, puedo verificar.
Para deshacerse de los últimos dos bloques de memoria asignados en SSL_library_init () intente:
sk_free(SSL_COMP_get_compression_methods());
Para deshacerse del error de compilación en la respuesta de Joe H:
sk_SSL_COMP_free(SSL_COMP_get_compression_methods());
Llamar SSL_COMP_free_compression_methods();
.