# malloc, calloc, realloc, free — C प्रोग्रामिंग

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

> रनटाइम पर heap से मेमोरी माँगें और छोड़ें।

## heap बनाम stack

लोकल वेरिएबल **stack** पर होते हैं और अपने आप गायब हो जाते हैं। **heap** वह मेमोरी है जिसे आप `malloc` परिवार के फंक्शनों से स्पष्ट रूप से माँगते हैं, और यह `free` करने तक आरक्षित रहती है।

## malloc + free

`malloc(n)` कच्ची, बिना इनिशियलाइज़ की मेमोरी लौटाता है (या विफलता पर `NULL`)। काम पूरा होने पर हमेशा `free` से जोड़ें।

```c
int *arr = malloc(5 * sizeof(int));
if (arr == NULL) {
    return 1; // allocation failed
}

for (int i = 0; i < 5; i++) arr[i] = i * i;
printf("%d\n", arr[4]);

free(arr);
arr = NULL;
```

Output:

```
16
```

## calloc बनाम realloc

`calloc(n, size)` मेमोरी आवंटित करता है और उसे **शून्य** कर देता है। `realloc(ptr, newSize)` मौजूदा ब्लॉक को बढ़ाता या घटाता है, पुराना डेटा कॉपी करते हुए — हमेशा इसका परिणाम दोबारा असाइन करें, क्योंकि ब्लॉक हिल सकता है।
