मेरी सी ++ एल्गोरिदम जब मैं मॉड्यूल आयात करने के बाद अजगर दुभाषिया छोड़ने मैं लगातार इस त्रुटि मिलती है के लिए बड़ा घूँट में एक आवरण ऊपर लिखने के बाद:glibc का पता चला *** अजगर: डबल मुक्त या भ्रष्टाचार (! पिछला) बड़ा घूँट
$ python
iPython 2.5.6 (r256:88840, Mar 10 2012, 14:05:15)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>from algol import *
>>>
*** glibc detected *** python: double free or corruption (!prev): 0x0000000001e42430 ***
फिर मुझे नियंत्रण नियंत्रण प्राप्त करने के लिए Ctrl + C करना है ... क्या हो रहा है?
मैं अपने बड़ा घूँट रैपर बनाने के लिए निम्न कमांड चला रहा हूँ:
%module algol
%{
#include "algol.hpp"
%}
%include "algol.hpp"
आप इस बारे में क्या सोचते हैं:
$NAME=algol
swig -c++ -python $NAME.i
g++ -fpic -c $NAME.cpp $NAME.hpp $NAME\_wrap.cxx -I/usr/local/include/python2.5
g++ -Xlinker -zmuldefs -shared $NAME.o $NAME\_wrap.o -o _$NAME.so
मेरे बड़ा घूँट इंटरफ़ेस फ़ाइल सिर्फ एक algol.hpp के शामिल है ? : एस
संपादित करें: संलग्न नमूना स्रोत यहाँ कोड ->http://pastebin.com/q210vEAs
आपके पास शायद आपके सी ++ एल्गोरिदम में मेमोरी लीक हो। एक उपकरण जैसे [वालग्रिंड] (http://www.valgrind.org) आपको ढूंढने में मदद कर सकता है। – Ken
@ केन - बिल्कुल एक रिसाव की तरह नहीं लगता है। चीजों को दो बार मुक्त करने के बारे में चेतावनियों के साथ दुर्घटनाओं का कारण नहीं है! Valgrind अभी भी डबल फ्री के साथ मदद कर सकते हैं। – Flexo
अधिक संभावना है कि आपने [तीन नियम] का उल्लंघन किया है (http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three) कहीं और SWIG ने कोड उत्पन्न किया है जो आपकी कक्षाओं को अलग-अलग उपयोग करता है जिस तरह से आप उनका परीक्षण करेंगे इसका तरीका। (यदि आप कहीं भी एक उथले प्रतिलिपि करते हैं जो उस वर्ग में 'मुक्त() 'या' हटाएं 'वर्ग है तो यह वास्तव में इस परिदृश्य का कारण बन जाएगा)। हालांकि अधिक कोड देखने के बिना यह असंभव * हालांकि अटकलों से अधिक करना है। क्या आप एक * न्यूनतम * लेकिन पूरा उदाहरण बना सकते हैं जो आपकी समस्या का वर्णन करता है? (आपको ऐसा करने में समस्या भी मिल सकती है!) – Flexo