Code2night
  • Home
  • Guest Posts
  • Tutorial
  • Languages
    • Angular
    • C
    • C#
    • HTML/CSS
    • Java
    • JavaScript
    • Node.js
    • Python
    • React
    • SQL Server
    • TypeScript
  • Post Blog
  • Tools
    • JSON Beautifier
    • HTML Beautifier
    • XML Beautifier
    • CSS Beautifier
    • JS Beautifier
    • PDF Editor
  • Register
  • Login
  1. Home
  2. Blogpost

Dynamic Memory Allocation in C: Understanding malloc, calloc, realloc, and free

Date- Mar 11,2026

13

c dynamic memory allocation

Overview of Dynamic Memory Allocation

Dynamic memory allocation is the process of allocating memory during the runtime of a program, allowing for flexible memory usage and efficient resource management. Unlike static memory allocation, which is fixed at compile time, dynamic allocation provides the ability to request memory as needed, which is essential for handling variable data sizes, such as user inputs or large datasets. Using dynamic memory allocation can significantly improve the performance and responsiveness of your applications.

Prerequisites

  • Basic understanding of C programming language
  • Familiarity with pointers in C
  • Knowledge of data types and structures in C
  • Compiling and running C programs

Using malloc for Memory Allocation

malloc (memory allocation) is a standard library function used to allocate a specified amount of memory during the runtime. It returns a pointer to the allocated memory block, which must be cast to the appropriate type.

#include 
#include 

int main() {
    int *arr;
    int n;
    printf("Enter the number of elements: ");
    scanf("%d", &n);

    // Allocating memory for n integers
    arr = (int *)malloc(n * sizeof(int));

    // Checking if memory allocation was successful
    if (arr == NULL) {
        printf("Memory allocation failed\n");
        return 1;
    }

    // Initializing and displaying the array
    for (int i = 0; i < n; i++) {
        arr[i] = i + 1;
    }

    printf("Array elements: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }

    // Freeing allocated memory
    free(arr);
    return 0;
}

This example demonstrates how to use malloc to allocate memory for an array of integers. Here's a breakdown of the code:

  • #include <stdio.h> and #include <stdlib.h>: Include the standard input/output and standard library headers.
  • int *arr;: Declare a pointer to hold the address of the dynamically allocated memory.
  • int n;: Declare an integer to store the number of elements the user wants.
  • scanf("%d", &n);: Read the number of elements from the user.
  • arr = (int *)malloc(n * sizeof(int));: Allocate memory for n integers and assign the pointer to arr.
  • if (arr == NULL): Check if malloc succeeded in allocating memory.
  • for (int i = 0; i < n; i++) { arr[i] = i + 1; }: Initialize the array with values.
  • free(arr);: Release the allocated memory to prevent memory leaks.

Using calloc for Memory Allocation

calloc (contiguous allocation) is another memory allocation function that allocates memory for an array of elements and initializes all bytes to zero. It takes two parameters: the number of elements and the size of each element.

#include 
#include 

int main() {
    int *arr;
    int n;
    printf("Enter the number of elements: ");
    scanf("%d", &n);

    // Allocating memory for n integers using calloc
    arr = (int *)calloc(n, sizeof(int));

    // Checking if memory allocation was successful
    if (arr == NULL) {
        printf("Memory allocation failed\n");
        return 1;
    }

    // Displaying the array
    printf("Array elements after calloc: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }

    // Freeing allocated memory
    free(arr);
    return 0;
}

This example illustrates how to use calloc for memory allocation. Here's the explanation:

  • arr = (int *)calloc(n, sizeof(int));: Allocate memory for n integers and initialize them to zero.
  • for (int i = 0; i < n; i++) { printf("%d ", arr[i]); }: Display the initialized array elements, which will all be zero.

Using realloc for Resizing Memory

realloc is used to resize a previously allocated memory block. It can increase or decrease the size of the memory block and may move the memory to a new location if the current block cannot accommodate the new size.

#include 
#include 

int main() {
    int *arr;
    int n;
    printf("Enter the initial number of elements: ");
    scanf("%d", &n);

    // Allocating memory for n integers
    arr = (int *)malloc(n * sizeof(int));

    // Checking if memory allocation was successful
    if (arr == NULL) {
        printf("Memory allocation failed\n");
        return 1;
    }

    // Initializing the array
    for (int i = 0; i < n; i++) {
        arr[i] = i + 1;
    }

    // Resize the array
    printf("Enter the new size: ");
    int new_size;
    scanf("%d", &new_size);
    arr = (int *)realloc(arr, new_size * sizeof(int));

    // Checking if realloc was successful
    if (arr == NULL) {
        printf("Memory reallocation failed\n");
        return 1;
    }

    // Displaying the resized array
    printf("Array elements after realloc: ");
    for (int i = 0; i < new_size; i++) {
        printf("%d ", arr[i]);
    }

    // Freeing allocated memory
    free(arr);
    return 0;
}

This example demonstrates how to use realloc. Here's the breakdown:

  • arr = (int *)malloc(n * sizeof(int));: Allocate memory for the initial size specified by the user.
  • arr = (int *)realloc(arr, new_size * sizeof(int));: Resize the memory block to the new size provided by the user.
  • if (arr == NULL): Check if the memory reallocation was successful.
  • for (int i = 0; i < new_size; i++) { printf("%d ", arr[i]); }: Display the current elements of the resized array.

Freeing Memory with free

The free function is used to deallocate memory that was previously allocated with malloc, calloc, or realloc. Failing to free dynamically allocated memory can lead to memory leaks.

#include 
#include 

int main() {
    int *arr;
    int n;
    printf("Enter the number of elements: ");
    scanf("%d", &n);

    arr = (int *)malloc(n * sizeof(int));
    if (arr == NULL) {
        printf("Memory allocation failed\n");
        return 1;
    }

    // Using the array
    for (int i = 0; i < n; i++) {
        arr[i] = i + 1;
    }

    // Freeing allocated memory
    free(arr);
    arr = NULL; // Prevent dangling pointer
    return 0;
}

This example shows the importance of freeing memory:

  • free(arr);: Deallocate the memory allocated for the array.
  • arr = NULL;: Set the pointer to NULL to avoid dangling pointers, which can lead to undefined behavior if dereferenced.

Best Practices and Common Mistakes

  • Always check for NULL: After using malloc, calloc, or realloc, check if the returned pointer is NULL to avoid dereferencing a null pointer.
  • Free memory: Always free the dynamically allocated memory using free to prevent memory leaks.
  • Set pointers to NULL after freeing: This prevents accidental usage of freed memory, which can cause crashes.
  • Use sizeof: When allocating memory, always use sizeof(type) to ensure the correct amount of memory is allocated.

Conclusion

Dynamic memory allocation is a powerful concept in C that allows for flexible memory management. By mastering the use of malloc, calloc, realloc, and free, you can create more efficient and responsive applications. Remember to always check for successful memory allocation, free allocated memory when it is no longer needed, and set pointers to NULL after freeing to avoid potential issues.

S
Shubham Saini
Programming author at Code2Night — sharing tutorials on ASP.NET, C#, and more.
View all posts →

Related Articles

Mastering Strings in C Programming: A Comprehensive Guide
Mar 11, 2026
Understanding Pointers in C Programming: A Comprehensive Guide
Mar 11, 2026
Mastering Control Structures in C: The if-else and switch Statements
Mar 09, 2026
Understanding Variables and Data Types in C: A Comprehensive Guide
Mar 08, 2026

Comments

Tags

Swagger UI
Swashbuckle
SwashbuckleAspNetCore
Rest API
Postman
Api Testing
ITextSharp
Export to Pdf
AspNet Core
AspNet
C#
View to Pdf in Aspnet
Scheduler
Fibonacci series in Java
Display Fibonacci Series
First C# Program
What is C?
C
C Programming
CodeLobster
Free Download for Youtube Subscribers!

First click on Subscribe Now and then subscribe the channel and come back here.
Then Click on "Verify and Download" button for download link

Subscribe Now | 1760
Download
Support Us....!

Please Subscribe to support us

Thank you for Downloading....!

Please Subscribe to support us

Continue with Downloading
Be a Member
Join Us On Whatsapp Join Us On Facebook
Code2Night

A community platform for sharing programming knowledge, tutorials, and blogs. Learn, write, and grow with developers worldwide.

Panipat, India   info@code2night.com

Quick Links
  • Home
  • Blogs
  • Tutorials
  • About Us
  • Contact
  • Privacy Policy
  • Terms & Conditions
  • Guest Posts
Dev Tools
  • JSON Beautifier
  • HTML Beautifier
  • XML Beautifier
  • CSS Beautifier
  • JS Beautifier
  • PDF Editor
By Language
  • Angular
  • C
  • C#
  • HTML/CSS
  • Java
  • JavaScript
  • Node.js
  • Python
  • React
  • SQL Server
  • TypeScript
© 2026 Code2Night. All Rights Reserved.
Built with for developers