2009-05-27 17 views
10

मेरे पास एक बहुत ही जटिल कक्षा है जिसके लिए मैं SWIG में पायथन रैपर बनाने का प्रयास कर रहा हूं। जब मैं अजगर में आइटम का एक उदाहरण बनाने के लिए, हालांकि, मैं असमर्थ हूँ संदेश प्राप्त करने के बिना कुछ डेटा के सदस्यों प्रारंभ करने में:स्विग/पायथन मेमोरी लीक का पता चला

>>> 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

यह सही नहीं है। एक विनाशक को परिभाषित करना पूरी तरह से संभव है, या डिफ़ॉल्ट डिफ़ॉल्ट विनाशक का उपयोग करना और यह त्रुटि नहीं दिखाना संभव है। महत्वपूर्ण बात यह है कि एसडब्ल्यूआईजी ऐसे विनाशक के अस्तित्व के बारे में जानता है। देखें: http://stackoverflow.com/questions/13587791/swig-and-c-memory-leak-with-vector-of-pointers/13593596#13593596 – Flexo

8

एसडब्ल्यूआईजी हमेशा विनाशक रैपर उत्पन्न करता है (जब तक %nodefaultdtor निर्देश का उपयोग नहीं किया जाता है)। हालांकि, अगर किसी प्रकार के बारे में कुछ भी नहीं पता है, तो यह एक अपारदर्शी सूचक आवरण उत्पन्न करेगा, जो लीक (और उपर्युक्त संदेश) का कारण बन जाएगा।

कृपया जांचें कि myDataType एक प्रकार है जिसे SWIG द्वारा जाना जाता है। पुन: चलाने डिबग संदेश के साथ बड़ा घूँट चालू है और किसी भी

Nothing is known about Foo base type - Bar. Ignored 

के रूप में ऊपर एक संदेश प्राप्त कर रहे करने के लिए इस तरह के संदेशों के लिए जाँच का मतलब है कि बड़ा घूँट सीमा तक अपने प्रकार पदानुक्रम पता नहीं है और इस प्रकार सीमित जानकारी पर चल रही है - जो यह एक dtor उत्पन्न नहीं कर सकता है।

+0

कौन सा एसडब्ल्यूआईजी डीबग ध्वज चालू होना चाहिए? उनमें से कुछ बहुत सारी जानकारी का उत्पादन करते हैं। आपके द्वारा उल्लेखित संदेशों के लिए मुझे किस ध्वज के बारे में पता होना चाहिए? – Michal

संबंधित मुद्दे