2011-12-28 11 views
16

मैंने fifo.h और fifo.c फ़ाइलों में फीफो सूची (कतार) का शुद्ध-सी कार्यान्वयन विकसित किया है, और मैंने एक परीक्षण प्रोग्राम testfifo.c लिखा है जिसे मैं ./bin/testfifo पर संकलित करता हूं। नोड संरचना list.h में परिभाषित की गई है।वालग्रिंड में दबाने वाले लीक का क्या अर्थ है?

मैं इस

valgrind --tool=memcheck --leak-check=full --show-reachable=yes ./bin/testfifo 

तरह ओएस एक्स 10.6 पर वेलग्रिंड के माध्यम से अपने कार्यक्रम चलाने के लिए और निम्नलिखित उत्पादन

==54688== Memcheck, a memory error detector 
==54688== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al. 
==54688== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info 
==54688== Command: bin/testfifo 
==54688== 
--54688-- bin/testfifo: 
--54688-- dSYM directory is missing; consider using --dsymutil=yes 
==54688== 
==54688== HEAP SUMMARY: 
==54688==  in use at exit: 88 bytes in 1 blocks 
==54688== total heap usage: 11 allocs, 10 frees, 248 bytes allocated 
==54688== 
==54688== LEAK SUMMARY: 
==54688== definitely lost: 0 bytes in 0 blocks 
==54688== indirectly lost: 0 bytes in 0 blocks 
==54688==  possibly lost: 0 bytes in 0 blocks 
==54688== still reachable: 0 bytes in 0 blocks 
==54688==   suppressed: 88 bytes in 1 blocks 
==54688== 
==54688== For counts of detected and suppressed errors, rerun with: -v 
==54688== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) 

मिल रिसाव सारांश के अनुसार, कोई लीक कर रहे हैं, लेकिन मैं अभी भी कर रहा हूँ सोच रहा है कि "दबाए गए" लीक क्या हैं। इसके अलावा, आवंटन और मुक्त की संख्या मेल नहीं खाती है, और इसलिए यदि मैं लीक हैं या नहीं तो मुझे अनिश्चितता है।

---- संपादित ----

valgrind --tool=memcheck --leak-check=full --show-reachable=yes -v ./bin/testfifo 
ओएस पर

चल रहा है एक्स 10.6 एक काफी लंबी और भ्रामक उत्पादन पैदा करता है, लेकिन मैं

valgrind --tool=memcheck --leak-check=full --show-reachable=yes ./bin/testfifo 

चलाने लिनक्स मशीन पर इस आउटपुट को मिला:

==32688== Memcheck, a memory error detector 
==32688== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al. 
==32688== Using Valgrind-3.6.1 and LibVEX; rerun with -h for copyright info 
==32688== Command: bin/testfifo 
==32688== 
==32688== 
==32688== HEAP SUMMARY: 
==32688==  in use at exit: 0 bytes in 0 blocks 
==32688== total heap usage: 10 allocs, 10 frees, 160 bytes allocated 
==32688== 
==32688== All heap blocks were freed -- no leaks are possible 
==32688== 
==32688== For counts of detected and suppressed errors, rerun with: -v 
==32688== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 4 from 4) 

alloc की और अब, से मेल खाते हैं तो ओएस एक्स पर अतिरिक्त alloc, के रूप में सुझाव दिया गया है कुछ प्रणाली पुस्तकालय की वजह से हो रहा है है।

मैंने 4 दबाए गए त्रुटियों को प्रकट करने के लिए -v विकल्प के साथ एक ही कमांड चलाया है, लेकिन मुझे आसानी से समझने योग्य नई जानकारी नहीं मिली है।

उत्तर

20

वे आपके कोड के बाहर लीक हैं (शायद साझा) पुस्तकालयों या ज्ञात झूठी सकारात्मक। -v के साथ वाल्ग्रिंड चलाना आपको इस्तेमाल किए गए दमनों के बारे में सूचित करना चाहिए।

+7

त्रुटि-जांच उपकरण सिस्टम पुस्तकालयों में सी समस्याओं जैसे कई सी समस्याओं का पता लगाते हैं, जो आपके ओएस के साथ पूर्व-स्थापित होते हैं। आप इन्हें आसानी से ठीक नहीं कर सकते हैं, लेकिन आप इन त्रुटियों को नहीं देखना चाहते हैं (और हाँ, बहुत सारे हैं!) तो वालग्रिंड स्टार्टअप पर दबाने के लिए त्रुटियों की एक सूची पढ़ता है। जब सिस्टम बनाया गया है तो ./configure स्क्रिप्ट द्वारा एक डिफ़ॉल्ट दमन फ़ाइल बनाई गई है। – Sjoerd

+2

इनमें से कुछ पुस्तकालयों के साथ भी समस्या नहीं हैं, लेकिन पुस्तकालयों के लिए संभावित रूप से आपके आवेदन के बाहरी प्रक्रियाओं के बीच स्मृति साझा करने के लिए जाना जाता है। –

+0

@ माइकलमोअर यूप, मैंने झिल्ली के साथ झूठी सकारात्मक देखी है। – cnicutar