2011-02-04 12 views
5

मैंने अभी सीपीपी कोड का एक टुकड़ा लिखा है और मैंने इसे ubuntu में G ++ का उपयोग करके संकलित किया है। जब मैं चलाने मेरी कोड सब कुछ ठीक है, कोड अच्छी तरह से चलाता है और उत्पादन देता है, लेकिन बाहर नहीं है और यह इस त्रुटि देता है:मुझे यह त्रुटि मिलती है: "glibc पता चला"

 
*** glibc detected *** ./a.out: free(): invalid next size (fast): 0x09f931f0 *** 
======= Backtrace: ========= 
/lib/libc.so.6(+0x6c501)[0x3de501] 
/lib/libc.so.6(+0x6dd70)[0x3dfd70] 
/lib/libc.so.6(cfree+0x6d)[0x3e2e5d] 
/usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0x6e2441] 
./a.out[0x8049ce6] 
/lib/libc.so.6(+0x2f69e)[0x3a169e] 
/lib/libc.so.6(+0x2f70f)[0x3a170f] 
/lib/libc.so.6(__libc_start_main+0xef)[0x388cef] 
./a.out[0x8048a61] 
======= Memory map: ======== 
00219000-0021a000 r-xp 00000000 00:00 0   [vdso] 
00354000-00370000 r-xp 00000000 08:01 8781845 /lib/ld-2.12.1.so 
00370000-00371000 r--p 0001b000 08:01 8781845 /lib/ld-2.12.1.so 
00371000-00372000 rw-p 0001c000 08:01 8781845 /lib/ld-2.12.1.so 
00372000-004c9000 r-xp 00000000 08:01 8781869 /lib/libc-2.12.1.so 
004c9000-004ca000 ---p 00157000 08:01 8781869 /lib/libc-2.12.1.so 
004ca000-004cc000 r--p 00157000 08:01 8781869 /lib/libc-2.12.1.so 
004cc000-004cd000 rw-p 00159000 08:01 8781869 /lib/libc-2.12.1.so 
004cd000-004d0000 rw-p 00000000 00:00 0 
00638000-00717000 r-xp 00000000 08:01 3935829 /usr/lib/libstdc++.so.6.0.14 
00717000-0071b000 r--p 000de000 08:01 3935829 /usr/lib/libstdc++.so.6.0.14 
0071b000-0071c000 rw-p 000e2000 08:01 3935829 /usr/lib/libstdc++.so.6.0.14 
0071c000-00723000 rw-p 00000000 00:00 0 
00909000-0092d000 r-xp 00000000 08:01 8781918 /lib/libm-2.12.1.so 
0092d000-0092e000 r--p 00023000 08:01 8781918 /lib/libm-2.12.1.so 
0092e000-0092f000 rw-p 00024000 08:01 8781918 /lib/libm-2.12.1.so 
00fdb000-00ff5000 r-xp 00000000 08:01 8781903 /lib/libgcc_s.so.1 
00ff5000-00ff6000 r--p 00019000 08:01 8781903 /lib/libgcc_s.so.1 
00ff6000-00ff7000 rw-p 0001a000 08:01 8781903 /lib/libgcc_s.so.1 
08048000-0804b000 r-xp 00000000 08:01 8652645 /home/akg/Desktop/contest/a.out 
0804b000-0804c000 r--p 00002000 08:01 8652645 /home/akg/Desktop/contest/a.out 
0804c000-0804d000 rw-p 00003000 08:01 8652645 /home/akg/Desktop/contest/a.out 
09f93000-09fb4000 rw-p 00000000 00:00 0   [heap] 
b7600000-b7621000 rw-p 00000000 00:00 0 
b7621000-b7700000 ---p 00000000 00:00 0 
b7765000-b7768000 rw-p 00000000 00:00 0 
b7775000-b7779000 rw-p 00000000 00:00 0 
bf9a7000-bf9c8000 rw-p 00000000 00:00 0   [stack] 
Aborted 

इसका क्या मतलब है? मुझे इससे कैसे छुटकारा मिल सकता है? मैं malloc या मुफ्त का उपयोग नहीं कर रहा हूँ, मैं बस वेक्टर का उपयोग कर रहा हूँ!

उत्तर

14

भले ही आप सीधे स्मृति आवंटित नहीं कर रहे हैं, फिर भी यह vector कोड में हुड के नीचे होता है और आपको संभवतया लिखने के द्वारा स्मृति के कुछ हिस्से को दूषित कर दिया जाता है जहां आपको नहीं माना जाता है। सबसे अधिक संभावना कारणों मैं के बारे में सोच सकते हैं:

  1. एक तत्व सीमा
  2. एक तत्व अब वैध नहीं है कि करने के लिए एक सूचक/संदर्भ का उपयोग से बाहर है कि करने के लिए लेखन - ध्यान दें कि अधिक तत्वों डालने को अमान्य कर सकते हैं पहले संदर्भ

बेशक, मैं निश्चित रूप से तब तक नहीं कह सकता जब तक आप कुछ प्रासंगिक कोड पोस्ट नहीं करते। या समस्या का स्रोत खोजने के लिए valgrind का उपयोग करने का प्रयास करें।

+4

+1 valgrind - बीटीडब्ल्यू के लिए +1, यहां लिंक है: http://valgrind.org/ –

5

इसका मतलब है कि आपने एक गैर वैध सूचक पर free कहा है (यानी: एक पॉइंटर जिसे मॉलोक के माध्यम से आवंटित नहीं किया गया है, या जिसे आप पहले ही मुक्त कर चुके हैं)।

कुछ कोड पेस्ट करें, अन्यथा यह कहना असंभव है कि ऐसा क्यों होता है।

+3

इसका यह भी अर्थ हो सकता है कि मॉलोक ढेर प्रबंधन डेटा दूषित हो गया है – bdonlan

+0

हां, यह सही है – peoro

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