Monday 15 August 2011

c++ - Boost: what could be the reasons for a crash in boost::slot<>::~slot? -


मुझे ऐसी दुर्घटना हो रही है:

  # 0 0x90b05955 __gnu_debug :: _ safe_iterator_base में: : __gnu_debug :: _ Safe_iterator_base :: _ M_attach # __gnu_debug :: _ Safe_sequence_base :: _ M_detach_all # safe_base.h पर 3 0x000bc54f __gnu_debug में :: _ Safe_sequence_base :: ~ _Safe_sequence_base में 2 0x90b05afa में _M_detach # 1 0x90b059ce: 170 # 4 0x000aac05 __gnu_debug में :: _ Safe_sequence करें & lt ; __ gnu_debug_def :: वेक्टर और लेफ्टिनेंट; बढ़ावा :: सिग्नल :: ट्रैकएबल कॉन्स्ट *, स्टडी :: ऑलोकेटर & लेफ्टिनेंट; बढ़ावा :: सिग्नल :: ट्रैकएबल कॉन्स्ट * & gt; & Gt; & Gt; :: ~ _Safe_sequence at safe_sequence.h: 97 # 5 0x000ac9c1 __gnu_debug_def :: वेक्टर & lt; boost :: सिग्नल :: ट्रैकयोग्य कॉन्स्ट *, स्टडी :: ऑलोकेटर & lt; boost :: सिग्नल :: ट्रैकयोग्य कॉन्स्ट * & gt; & Gt; ::: वेक्टर वेक्टर: 95 # 6 0x000acf65 को बढ़ावा :: सिग्नल :: विस्तार :: स्लॉट_बेस :: डेटा_टी :: डेटा_टी स्लॉट। एचपी: 32 # 7 0x000acf8f में boost :: checked_delete & lt; boost :: signals :: विस्तार :: slot_base :: data_t & gt; Check_delete.hpp पर: 34 # 8 को बढ़ावा देने में 0x000b081e :: विस्तार :: sp_counted_impl_p & lt; boost :: signals :: detail :: slot_base :: data_t & gt; :: sp_counted_impl.hpp पर निपटारा: 78 # 9 0x0000a016 को बढ़ावा :: विस्तार में: : Sp_counted_base :: release at sp_counted_base_gcc_x86.hpp: 145 # 10 0x0000a046 को बढ़ावा :: विवरण :: shared_count :: ~ shared_count at shared_count.hpp: 217 # 11 0x000a9fb0 में बढ़ावा :: साझा_पीट & लेफ्टिनेंट :: बढ़ावा :: सिग्नल :: विस्तार :: Slot_base :: data_t & gt; :: shared_ptr at shared_ptr.hpp: 169 # 12 0x000aa459 को बढ़ावा :: संकेत :: विस्तार :: slot_base :: slot_base slot.hpp पर: 27 # 13 0x000aad07 बढ़ावा :: स्लॉट & lt; बढ़ावा: : फ़ंक्शन & lt; bool () (char, int) & gt; & Gt; ::: स्लॉट स्लॉट.hpp: 105 # 14 0x001b943b मुख्य में vermes.cpp: 102  

यह कोड है:

  # शामिल करें & lt; boost / signal.hpp & gt; # शामिल करें & lt; boost / lexical_cast.hpp & gt; # शामिल करें & lt; boost / function.hpp & gt; # शामिल करें & lt; boost / bind.hpp & gt; बूल डममिफन्क (चार, इंट) {वापसी झूठी; } Int main (int argc, char ** argv) {boost :: sign & lt; bool (char, int) & gt; myslot; Myslot.connect (0, & amp; dummyfunc); वापसी 0; }  

यह पहली बार है कि मैं बूस्ट के साथ काम कर रहा हूं और मैं इस परियोजना के कोड के लिए पूरी तरह से नया हूं जो मैं यहां पोर्ट की कोशिश कर रहा हूं।

यही कारण है कि मैं पूछना चाहूंगा कि इस तरह की दुर्घटना बूस्ट द्वारा समझाई गई किसी भी तरह से हो सकती है या अगर यह बूस्ट से संबंधित नहीं है।

मैंने पहले से ही दुर्घटना को समझने की कोशिश की है, लेकिन मैं किसी तरह फंस गया। ऐसा लगता है कि संभवतः std :: vector, जो कि यहाँ हटाया जा रहा है, गड़बड़ कर दिया गया है (गड़बड़ = स्मृति भ्रष्ट) वेक्टर स्लॉट_बेस :: डेटा_टी का सदस्य है हटाए गए स्लॉट_बेस :: share_ptr के नाशक में किया जाता है तो शायद share_ptr भी गड़बड़ हो गया था - इसलिए संभवतः यहां तक ​​कि पूरे स्लॉट_बेस को गड़बड़ कर दिया गया था। लेकिन मेरे पास कोड में, मुझे वास्तव में एक कारण नहीं देखा गया है कि उस मेमोरी को गड़बड़ क्यों किया जा सकता है। MySlot के निर्माण के बाद भी यह पहली पहुंच है।

इसके अलावा: मुझे भी सच में समझ में नहीं आ रहा है कि जब मैं कनेक्ट करता हूं तो ~ slot_base () को यहां कहा जाता है। लेकिन मुझे भी कनेक्ट सदस्य सदस्य नहीं मिला। क्या यह एक जादू मैक्रो कहीं है?

मुझे समस्या मिली जब मैं इन पूर्वप्रक्रमक परिभाषाओं को सक्षम करता हूं (मेरे Xcode डीबग कॉन्फ़िगरेशन में डिफ़ॉल्ट रूप से करता है), तो यह क्रैश हो जाता है:

  -D _GLIBCXX_DEBUG = 1-डी _GLIBCXX_DEBUG_PEDANTIC = 1  
< P> मुझे लगता है कि बूस्ट (बजाम) बिना संकलित किए हैं और ऐसी समस्याओं का कारण बनता है क्योंकि एसटीएल संरचनाएं (जैसे वेक्टर) द्विआधारी रूप में अलग दिखती हैं जब इसे या इसके बिना संकलित किया जाता है।


No comments:

Post a Comment