सी के लिए, एक अच्छा कोड संगठन मदद करता है। अर्थात। अपने कोडबेस पर malloc() और मुफ्त() को कॉल फेंक न दें। उन्हें दो कार्यों में केंद्रीकृत करें, फिर आपके पास सभी चेकिंग के लिए एक बिंदु है। सबसे आसान व्यक्ति सफल कॉलों की गणना करना और कार्यक्रम से बाहर निकलने के लिए जांच कर सकता है कि वे संतुलित हैं।
static unsigned long mymem_count_alloc = 0;
static unsigned long mymem_count_free = 0;
void *mymem_alloc (size_t size)
{
void *p;
p = malloc(size);
if (p)
{
mymem_count_alloc++;
}
else
error logging/handling/signaling
return (p);
}
void mymem_free (void *p)
{
if (p)
{
free(p);
mymem_count_free++;
}
}
void mymem_check (void)
{
if (mymem_count_alloc != mymem_count_free)
error alert
}
आप इसे विभिन्न डेटा संरचनाओं के लिए जारी रख सकते हैं। एक स्ट्रिंग के लिए आपको स्मृति आवंटित करने की आवश्यकता है, mystr_alloc और mystr_free का उपयोग करें। और इसी तरह। जब एक रिसाव इस तरह से पता चला है, तो आप इसे जल्दी से संकीर्ण कर सकते हैं।
क्या आप सी, या सी ++ का उपयोग कर रहे हैं? उपलब्ध समाधान दो भाषाओं के लिए काफी अलग हैं। –
मैं सी का उपयोग कर रहा हूं। क्या आप सी और सी ++ – Ankur
@ अंकुर दोनों के लिए एक प्रस्ताव प्रदान कर सकते हैं: ठीक है एक उत्तर जो सी के लिए समझ में आता है सी ++ और इसके विपरीत के लिए समझ में नहीं आता है। मेमोरी प्रबंधन बिट्स में से एक है जो सी ++ में बदल जाता है। –