2011-04-03 12 views
6

मैं मेमोरी लीक डिटेक्शन लाइब्रेरी की तलाश में हूं। कुछ ऐसा है जैसे मैं इसे स्रोत कोड में शामिल करूँगा, फिर इसे पहचानना शुरू करना चाहिए। बाहरी कार्यक्रम अच्छे हो सकते हैं लेकिन मैं कुछ पुस्तकालय की तलाश में था जिसे निष्पादन योग्य में जोड़ा जा सकता है।
यह मैं विंडोज़ की तलाश में हूं।सी ++ मेमोरी लीक ऑटो डिटेक्शन लाइब्रेरी

उत्तर

2

विजुअल स्टूडियो में विंडोज़ पर ऐसी सुविधा है। http://msdn.microsoft.com/en-us/library/e5ewb1h3(v=VS.90).aspx देखें। लिनक्स के तहत मुझे नहीं पता कि ऐसी चीजें मौजूद हैं, लेकिन valgrind सभी तरह की मेमोरी समस्याओं को खोजने के लिए वास्तव में अच्छा है (न केवल लीक, बल्कि उदाहरण के लिए अमान्य पढ़ता है)।

4

मैं Visual Leak Detector का सुझाव दे सकता हूं, विजुअल स्टूडियो में निर्मित एक से अधिक उपयोग करना आसान है।

4

मेमोरी रिसाव का पता लगाने के लिए आप अपने कोड में कुछ तकनीकों का उपयोग कर सकते हैं। पता लगाने का सबसे आम और सबसे आसान तरीका है, एक मैक्रो कहते हैं, DEBUG_NEW परिभाषित करें और अपने कोड में मेमोरी लीक का पता लगाने के लिए __FILE__ औरजैसे पूर्वनिर्धारित मैक्रोज़ के साथ इसका उपयोग करें। ये पूर्वनिर्धारित मैक्रोज़ आपको स्मृति लीक की फ़ाइल और लाइन संख्या बताते हैं।

DEBUG_NEW सिर्फ एक मैक्रो जो आम तौर पर के रूप में परिभाषित किया जाता है:

#define DEBUG_NEW new(__FILE__, __LINE__) 
#define new DEBUG_NEW 

ताकि भी आप new उपयोग करते हैं, यह भी है, जिसमें स्मृति रिसाव का पता लगाने का इस्तेमाल किया जा सकता फ़ाइल और लाइन नंबर का ट्रैक रख सकते अपने कार्यक्रम।

और __FILE__, __LINE__predefined macros हैं जो क्रमशः फ़ाइल नाम और लाइन नंबर का मूल्यांकन करते हैं जहां आप उनका उपयोग करते हैं!

निम्न आलेख जो अन्य रोचक मैक्रो के DEBUG_NEW का उपयोग कर, बहुत खूबसूरती से की तकनीक बताते पढ़ें:

A Cross-Platform Memory Leak Detector


Wikpedia से,

Debug_new में एक तकनीक को संदर्भित करता है C++ ओवरलोड और/या ऑपरेटर को फिर से परिभाषित करने के लिए नया और ऑपरेटर क्रम में हटाएं मेमोरी आवंटन और डेलोकेशन कॉल को अवरुद्ध करता है, और इस प्रकार मेमोरी उपयोग के लिए प्रोग्राम डीबग करता है। यह अक्सर DEBUG_NEW नामक एक मैक्रो निर्धारित करना पड़ता है, और नए बनाता आवंटन पर फ़ाइल/रेखा जानकारी रिकॉर्ड करने बनने कुछ नया (_ फ़ाइल _, _ लाइन _) की तरह। माइक्रोसॉफ्ट विजुअल सी ++ इस तकनीक को माइक्रोसॉफ्ट फाउंडेशन क्लासेस में उपयोग करता है। मैक्रो पुनर्नवीनीकरण का उपयोग करते हुए से बचने के लिए इस विधि को विस्तारित करने के तरीके हैं, जबकि कुछ प्लेटफ़ॉर्म पर फ़ाइल/रेखा जानकारी प्रदर्शित करने में सक्षम हैं। इस विधि में कई अंतर्निहित सीमाएं हैं।यह केवल सी ++ पर लागू होता है, और सी मैलोक जैसे कार्यों द्वारा मेमोरी लीक नहीं पकड़ सकता है। हालांकि, कुछ मेमोरी डीबगर समाधान की तुलना में उपयोग करने के लिए बहुत आसान हो सकता है और तेज भी हो सकता है।

+1

मेरे द्वारा +1। यह लीक का पता लगाने के लिए मेरे पसंदीदा तरीकों में से एक है लेकिन आवंटित पतों की सूची बनाए रखना और उन्हें प्रत्येक डिलीट पर हटाने के लिए भेजे गए पते के खिलाफ जांच करना प्रदर्शन प्रोत्साहन (ओ (एन) = एनएलओएल (एन) है। यहां उल्लेख करना महत्वपूर्ण है , केवल डीबग बिल्ड में तकनीक का उपयोग करने के लिए और रिलीज बिल्ड पर नहीं। –

+0

@ एएलएस: मैंने सोचा था कि यह स्पष्ट था कि इस तकनीक का उपयोग केवल डीबग बिल्ड में किया जाना चाहिए, क्योंकि मैंने चुना मैक्रो नाम (या आमतौर पर चुना गया) 'DEBUG_NEW' है। – Nawaz

+0

बस इसका एक स्पष्ट उल्लेख है। आपके पास वैसे भी मेरा +1 है :) मैं किसी भी यूनिकॉर्न को अन्य दिन के रूप में नहीं देख सका .... –

0

अलावा, मैं कुछ अच्छा सलाह दे सकते हैं कार्यक्रम: ^) उदाहरण के रूप में? विंडोज के लिए डिलीकर का उपयोग करना अच्छा होगा।

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