Обнаружена утечка памяти в Swig / Python - PullRequest
12 голосов
/ 28 мая 2009

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

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

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

Ответы [ 2 ]

9 голосов
/ 28 мая 2009

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

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

Nothing is known about Foo base type - Bar. Ignored

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

0 голосов
/ 28 мая 2009

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

...