2009-05-27 2 views
10

У меня очень сложный класс, для которого я пытаюсь сделать обертки Python в SWIG. Когда я создаю экземпляр элемента в Python, тем не менее, я не могу инициализировать некоторые элементы данных без получения сообщения:обнаружена утечка памяти Swig/Python

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

Кто-нибудь знает, что мне нужно сделать, чтобы решить эту проблему? Есть ли флаг, который я мог бы использовать для создания деструкторов?

+1

Вопрос, связанный с этим: http://stackoverflow.com/questions/13587791/swig-and-c-memory-leak-with-vector-of-pointers/13593596#13593596 – Flexo

ответ

-7

Сообщение об ошибке довольно ясно для меня, вам нужно определить деструктор для этого типа.

+2

Неправильное использование. Вполне возможно определить деструктор или использовать деструктор по умолчанию по умолчанию и не видеть эту ошибку. Важно то, что SWIG знает о существовании такого деструктора. См. Http://stackoverflow.com/questions/13587791/swig-and-c-memory-leak-with-vector-of-pointers/13593596#13593596 – Flexo

8

SWIG всегда создает оболочки деструктора (если не используется директива %nodefaultdtor). Однако, если он ничего не знает о типе, он создаст непрозрачную оболочку указателя, которая вызовет утечки (и вышеприведенное сообщение).

Пожалуйста, проверьте, что myDataType - это тип, известный SWIG. Повторно запустите SWIG с отладочных сообщений включена и проверьте наличие сообщений, подобных

Nothing is known about Foo base type - Bar. Ignored 

получающего сообщение, как указано выше означает, что SWIG не знает иерархии типов в полной мере и, таким образом, действует на ограниченной информации - которая может привести к тому, что он не будет генерировать dtor.

+0

Какой флаг отладки SWIG должен быть включен? Некоторые из них производят очень много информации. Под каким флагом я должен искать сообщения, которые вы упомянули? – Michal

 Смежные вопросы

  • Нет связанных вопросов^_^