# मेमोरी लीक और डैंगलिंग पॉइंटर — C प्रोग्रामिंग

Source: https://www.geekswithgeeks.com/hi/c/c-memory-leaks

> heap मेमोरी सावधानी से न संभालने पर क्या गलत होता है।

## लीक: वह मेमोरी जिस तक आप कभी नहीं पहुँच सकते

अगर आप `malloc` किए ब्लॉक के इकलौते पॉइंटर को बिना free किए ओवरराइट या खो देते हैं, तो वह मेमोरी हमेशा के लिए आरक्षित रह जाती है — यही **मेमोरी लीक** है। लंबे समय तक चलने वाले प्रोग्राम (सर्वर, गेम) बार-बार लीक होने पर आखिरकार मेमोरी खत्म कर देते हैं।

## डैंगलिंग पॉइंटर

`free` के बाद, पॉइंटर पुराना एड्रेस ही रखता है — उसका उपयोग करना अनिर्धारित व्यवहार है, भले ही कंपाइलर आपको न रोके।

```c
int *p = malloc(sizeof(int));
*p = 42;
free(p);

printf("%d\n", *p); // BUG: use-after-free
p = NULL;             // now safe: NULL is checkable
```

## आम नियम

हर `malloc`/`calloc` का बिल्कुल एक ही matching `free` होना चाहिए। free करने के तुरंत बाद पॉइंटर को `NULL` सेट करें ताकि गलती से दोबारा उपयोग चुपचाप मेमोरी करप्ट करने के बजाय साफ़ तौर पर विफल हो।

**Quiz:** किसी पॉइंटर पर free() कॉल करने के तुरंत बाद आपको क्या करना चाहिए?

- [x] उसे NULL सेट करें
- [ ] उस पर दोबारा free() कॉल करें
- [ ] कुछ नहीं, इसे उपयोग करते रहना ठीक है

*Answer:* उसे NULL सेट करें. NULL सेट करने से गलती से use-after-free बग नहीं होता।
