✔ What is Dynamic Memory Allocation?
✔ Difference between static and dynamic memory allocation
✔ Why do we need dynamic memory allocation?
✔ malloc(size_t size) – Allocates memory but does not initialize it
✔ calloc(size_t num, size_t size) – Allocates memory and initializes it to zero
✔ realloc(void *ptr, size_t size) – Resizes previously allocated memory
✔ free(void *ptr) – Deallocates dynamically allocated memory