2012-06-12 11 views
6

बिना मैं valgrind साथ मेरा अंतिम "किया" संदेश मिलता है, और यह बाहर निकलने रिपोर्ट प्राप्त:segfaulting केवल valgrind

==3434== HEAP SUMMARY: 
==3434==  in use at exit: 8,432 bytes in 4 blocks 
==3434== total heap usage: 4,369 allocs, 8,037 frees, 377,356 bytes allocated 
==3434== 
==3434== LEAK SUMMARY: 
==3434== definitely lost: 152 bytes in 1 blocks 
==3434== indirectly lost: 0 bytes in 0 blocks 
==3434==  possibly lost: 0 bytes in 0 blocks 
==3434== still reachable: 8,192 bytes in 2 blocks 
==3434==   suppressed: 88 bytes in 1 blocks 
==3434== Rerun with --leak-check=full to see details of leaked memory 
==3434== 
==3434== For counts of detected and suppressed errors, rerun with: -v 
==3434== ERROR SUMMARY: 100190 errors from 140 contexts (suppressed: 0 from 0) 

लेकिन जब मैंने उसे valgrind बिना चलाने के लिए, इसे तुरंत segfaults। क्या वालग्रिंड एक निश्चित प्रकार की त्रुटि को दबाता है जिसे मुझे ढूंढना चाहिए? मुझे इस ऑनलाइन

+1

वाल्ग्रिंड आउटपुट में कोई भी "अमान्य पढ़ने" या "अमान्य लेखन"? –

+0

उनमें से टन। वे बुरा होना चाहिए। – SetSlapShot

+2

हाँ। उनका मतलब है कि आप स्मृति पढ़ रहे हैं या लिख ​​रहे हैं जो आपका नहीं है। सभी को ठीक करना होगा। –

उत्तर

4

वालग्रिंड प्रोग्राम को एक अलग वातावरण में चलाता है अगर आप इसे खोल से चलाते हैं। यह स्मृति थकावट या सरणी आउटबाउंडिंग के सापेक्ष कुछ क्रैश को रोक सकता है।

त्रुटियों के अपने 140 संदर्भों को ठीक करें और आप ठीक होंगे।

3

मेमचेक पूर्ण सीमा जांच नहीं करता है और क्योंकि इसकी अपनी मेमोरी आवंटक है, यह आपके द्वारा अन्यथा प्राप्त होने वाली त्रुटियों को दबा सकता है। इसके बजाय एक डीबगर का प्रयोग करें।

1

वाल्ग्रिंड द्वारा कभी-कभी पकड़ा नहीं गया त्रुटि का एक उदाहरण तब होता है जब आप मुफ्त मेमोरी करते हैं और उसके बाद इसे किसी अन्य पॉइंटर के माध्यम से संदर्भित करते हैं जो एक ही स्थान पर इंगित कर रहा था।

मुझे यकीन नहीं है कि ऐसा क्यों होता है। शायद वालग्रिंड पर्यावरण स्मृति आवंटन और अलग-अलग स्थानांतरित करता है। [जैसा कि Eregrith कहते हैं]

यह जांचने का एक त्वरित तरीका अस्थायी रूप से आपके फ्री() फ़ंक्शन कॉल पर टिप्पणी करना होगा और देखें कि यह अभी भी segfaults है या नहीं। [उन्हें ठीक करने के बाद, उन्हें बाद में अनदेखा करें!]

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