2009-05-27 15 views
10

Tengo una clase muy complicada para la que estoy tratando de hacer contenedores de Python en SWIG. Al crear una instancia del objeto en Python, sin embargo, no soy capaz de inicializar ciertos miembros de datos sin recibir el mensaje:Se detectó fuga de memoria Swig/Python

>>> myVar = myModule.myDataType() 
swig/python detected a memory leak of type 'MyDataType *', no destructor found. 

¿Alguien sabe lo que necesito hacer para hacer frente a esto? ¿Hay una bandera que podría estar usando para generar destructores?

+1

Pregunta relacionada: http://stackoverflow.com/questions/13587791/swig-and-c-memory-leak-with-vector-of-pointers/13593596#13593596 – Flexo

Respuesta

-7

El mensaje de error es bastante claro para mí, necesita definir un destructor para este tipo.

+2

Esto no es correcto. Es completamente posible haber definido un destructor, o estar utilizando un destructor predeterminado predeterminado y no ver este error. Lo importante es que SWIG sabe acerca de la existencia de tal destructor. Ver: http://stackoverflow.com/questions/13587791/swig-and-c-memory-leak-with-vector-of-pointers/13593596#13593596 – Flexo

8

SWIG siempre genera envoltorios de destructor (a menos que se use la directiva %nodefaultdtor). Sin embargo, en caso de que no sepa nada sobre un tipo, generará un contenedor de puntero opaco, que causará fugas (y el mensaje anterior).

Compruebe que myDataType es un tipo conocido por SWIG. Vuelva a ejecutar el TRAGO con mensajes de depuración activada y comprobar si hay mensajes similares a

Nothing is known about Foo base type - Bar. Ignored 

Recepción de un mensaje que el anterior significa que el TRAGO no conoce su jerarquía de tipos con todo el rigor y por lo tanto opera en información limitada - el cual podría causar que no genere un dtor.

+0

¿Qué indicador de depuración SWIG debería activarse? Algunos de ellos producen mucha información. ¿Bajo qué bandera debería estar buscando los mensajes que mencionaste? – Michal