2013-01-27 51 views
9

मेरे पास सीआरटीडीबीजी के साथ मिली मेमोरी लीक का एक गुच्छा था लेकिन उन्हें विजुअल लीक डिटेक्शन स्थापित करने में मुश्किल लग गई। इसने एक निश्चित संख्या में लीक दिखाए जो मैंने आभासी विनाशकों के सार तत्वों के लिए खोजा था। मैंने इसे ठीक किया और वीएलडी अब मेरे आवेदन में कोई मेमोरी लीक नहीं दिखाता है, हालांकि सीआरटीडीबीजी अभी भी करता है और यह लगातार 100 या इतने रिसाव दिखा रहा है।वीएस2012, सी ++ 11 और मेमोरी लीक डिटेक्शन (वीएलडी बनाम सीआरटीडीबीजी)

क्या इनमें से किसी भी उपकरण को C++ 11 पर भरोसा किया जा सकता है? मैं अद्वितीय पॉइंटर्स का भारी उपयोग कर रहा हूं और बिना किसी नई वस्तुएं बना रहा हूं, इसलिए यह समझ में नहीं आता कि लीक कहां से आ रहे हैं।

+0

क्या आपके पास कोई वैश्विक वस्तुएं हैं, शायद 'unique_ptr' के साथ? यदि आप करते हैं, तो इन्हें "लीक मेमोरी" के रूप में माना जा सकता है। – Ali

+0

आप सही हैं, मैं मुख्य गेम में अपने गेम इंजन का एक उदाहरण बना देता हूं जिसे मैं _CrtDumpMemoryLeaks() को कॉल करने से पहले हटा नहीं देता हूं। मुझे मूर्ख! यह ढेर पर है इसलिए ÍrtDumpMemoryLeaks() से पहले एक ब्लॉक के अंदर उस उदाहरण को डालने से पहले सीआरटीडीबीजी के साथ लीक कम हो जाती है। धन्यवाद! क्या आप इसे एक उत्तर के रूप में जोड़ सकते हैं ताकि मैं इसे स्वीकार कर सकूं? – Rajveer

+0

मैंने अभी एक उत्तर पोस्ट किया है। वैसे भी, आपका सवाल उठाया! यह देखना अच्छा होता है कि आप मेमोरी लीक के बारे में परवाह करते हैं, मैं अक्सर चाहता हूं कि अन्य डेवलपर्स वही करें ... – Ali

उत्तर

9

यदि आपके पास main() में स्टैक पर कुछ वैश्विक वस्तुएं या कुछ हैं, तो उन्हें main() निकास से पहले नष्ट नहीं किया जाएगा।

यदि ये ऑब्जेक्ट्स गतिशील स्मृति आवंटन करते हैं और के बहुत अंत में आप _CrtDumpMemoryLeaks() पर कॉल करते हैं, तो भी आप उस स्मृति को "लीक" के रूप में देखेंगे।