¿Alguien conoce una "técnica" para descubrir fugas de memoria causadas por punteros inteligentes? Actualmente estoy trabajando en un gran proyecto escrito en C++ que utiliza en gran medida punteros inteligentes con recuento de referencias. Obviamente, tenemos algunas pérdidas de memoria causadas por punteros inteligentes, que todavía se hace referencia en algún lugar del código, por lo que su memoria no se libera. Es muy difícil encontrar la línea de código con la referencia "innecesaria", que hace que el objeto correspondiente no se libere (aunque ya no sea útil).Buscar fugas de memoria causadas por punteros inteligentes
Encontré algunos consejos en la web, que propuso recopilar las pilas de llamadas de las operaciones de incremento/decremento del contador de referencia. Esto me da una buena pista, qué pieza de código ha causado que el contador de referencia se incremente o disminuya.
Pero lo que necesito es algún tipo de algoritmo que agrupe los correspondientes "aumentos/disminuciones de llamadas" juntos. Después de eliminar estos pares de llamadas, espero tener (al menos) un "aumento de la pila de llamadas", que me muestra el fragmento de código con la referencia "innecesaria", que provocó que el objeto correspondiente no se liberara. ¡Ahora no será un gran problema arreglar la fuga!
¿Pero alguien tiene una idea para un "algoritmo" que hace la agrupación?
El desarrollo se lleva a cabo en Windows XP.
(espero que alguien entendido, lo que he tratado de explicar ...)
EDIT: Estoy hablando de fugas causadas por las referencias circulares.
No estoy seguro Entiendo ... ¿puede hacer referencia a un lenguaje de programación o una plataforma más específicamente? Las fugas de memoria pueden variar en su manejo. – zxcv
Punteros inteligentes generalmente significan C++/STL. –
Hay algo de confusión aquí. Creo que valdría la pena distinguir entre la memoria asignada que no tiene un puntero (no debería suceder con los punteros inteligentes), las fugas causadas por referencias circulares y los objetos cuyo tiempo de vida se extiende innecesariamente porque el puntero se mantiene. –