2009-05-27 5 views
10

SWIG에서 파이썬 래퍼를 만들려고하는 매우 복잡한 클래스가 있습니다. 내가 파이썬에서 항목의 인스턴스를 만들 때, 그러나, 나는 메시지를받지 않고 특정 데이터 멤버를 초기화 할 수 없습니다 해요 :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 

와 유사한 어떤 메시지를 확인 꿀꺽 꿀꺽는 전체 범위에 유형 계층 구조를 알 수 없음을 의미하고, 따라서 제한된 정보에서 작동 - 어떤 dtor을 생성하지 못하게 할 수 있습니다.

+0

어떤 SWIG 디버그 플래그를 켜야합니까? 그들 중 일부는 엄청난 양의 정보를 산출합니다. 언급 한 메시지를 어떤 플래그로 찾아야합니까? – Michal

관련 문제