# malloc, calloc, realloc, free — C Programming

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

> Request and release memory from the heap at runtime.

## The heap vs the stack

Local variables live on the **stack** and vanish automatically. The **heap** is memory you request explicitly with `malloc`-family functions, and it stays reserved until you `free` it.

## malloc + free

`malloc(n)` returns raw, uninitialised memory (or `NULL` on failure). Always pair it with `free` once done.

```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 vs realloc

`calloc(n, size)` allocates and **zeroes** the memory. `realloc(ptr, newSize)` grows or shrinks an existing block, copying old data over — always reassign its result, since the block may move.
