Skip to main content

Dynamic Memory Allocation in C using malloc(), calloc(), free() and realloc()

 Since C is a structured language, it has some fixed rules for programming. One of it includes changing the size of an array. An array is collection of items stored at continuous memory locations.


As it can be seen that the length (size) of the array above made is 9. But what if there is a requirement to change this length (size). For Example,

  • If there is a situation where only 5 elements are needed to be entered in this array. In this case, the remaining 4 indices are just wasting memory in this array. So there is a requirement to lessen the length (size) of the array from 9 to 5.
  • Take another situation. In this, there is an array of 9 elements with all 9 indices filled. But there is a need to enter 3 more elements in this array. In this case 3 indices more are required. So the length (size) of the array needs to be changed from 9 to 12.

This procedure is referred to as Dynamic Memory Allocation in C.

Therefore, C Dynamic Memory Allocation can be defined as a procedure in which the size of a data structure (like Array) is changed during the runtime.

C provides some functions to achieve these tasks. There are 4 library functions provided by C defined under <stdlib.h> header file to facilitate dynamic memory allocation in C programming. They are:

  1. malloc()
  2. calloc()
  3. free()
  4. realloc()

Let’s look at each of them in greater detail.

  1. C malloc() method

    “malloc” or “memory allocation” method in C is used to dynamically allocate a single large block of memory with the specified size. It returns a pointer of type void which can be cast into a pointer of any form. It initializes each block with default garbage value.

    Syntax:

    ptr = (cast-type*) malloc(byte-size)

    For Example:

  2. #include <stdio.h> 

    #include <stdlib.h> 


    int main() 


    // This pointer will hold the 

    // base address of the block created 

    int* ptr; 

    int n, i; 


    // Get the number of elements for the array 

    n = 5; 

    printf("Enter number of elements: %d\n", n); 


    // Dynamically allocate memory using malloc() 

    ptr = (int*)malloc(n * sizeof(int)); 


    // Check if the memory has been successfully 

    // allocated by malloc or not 

    if (ptr == NULL) { 

    printf("Memory not allocated.\n"); 

    exit(0); 

    else { 


    // Memory has been successfully allocated 

    printf("Memory successfully allocated using malloc.\n"); 


    // Get the elements of the array 

    for (i = 0; i < n; ++i) { 

    ptr[i] = i + 1; 


    // Print the elements of the array 

    printf("The elements of the array are: "); 

    for (i = 0; i < n; ++i) { 

    printf("%d, ", ptr[i]); 


    return 0; 

    1. Output:
      Enter number of elements: 5
      Memory successfully allocated using malloc.
      The elements of the array are: 1, 2, 3, 4, 5,
      
    2. C calloc() method

      “calloc” or “contiguous allocation” method in C is used to dynamically allocate the specified number of blocks of memory of the specified type. It initializes each block with a default value ‘0’.

      Syntax:

    3. ptr = (cast-type*)calloc(n, element-size);

      For Example:

      ptr = (float*) calloc(25, sizeof(float));

      This statement allocates contiguous space in memory for 25 elements each with the size of the float.


      If space is insufficient, allocation fails and returns a NULL pointer.

      Example:

    4. #include <stdio.h> 

      #include <stdlib.h> 


      int main() 


      // This pointer will hold the 

      // base address of the block created 

      int* ptr; 

      int n, i; 


      // Get the number of elements for the array 

      n = 5; 

      printf("Enter number of elements: %d\n", n); 


      // Dynamically allocate memory using calloc() 

      ptr = (int*)calloc(n, sizeof(int)); 


      // Check if the memory has been successfully 

      // allocated by calloc or not 

      if (ptr == NULL) { 

      printf("Memory not allocated.\n"); 

      exit(0); 

      else { 


      // Memory has been successfully allocated 

      printf("Memory successfully allocated using calloc.\n"); 


      // Get the elements of the array 

      for (i = 0; i < n; ++i) { 

      ptr[i] = i + 1; 


      // Print the elements of the array 

      printf("The elements of the array are: "); 

      for (i = 0; i < n; ++i) { 

      printf("%d, ", ptr[i]); 


      return 0; 



Comments

Popular posts from this blog

System Analysis and Design Elias M. Awad (Unit - 1)

Systems development is systematic process which includes phases such as planning, analysis, design, deployment, and maintenance. example :- Computer System , Business System , Hotel , Library , College. Audience This tutorial will help budding software professionals to understand how a system is designed in a systematic and phased manner, starting from requirement analysis to system implementation and maintenance. Prerequisites This tutorial is designed for absolute beginners and hence there are no prerequisites as such, however it is assumed that the reader is familiar with the fundamentals of computers. System   Systems development is systematic process which includes phases such as planning, analysis, design, deployment, and maintenance. Here, in this tutorial, we will primarily focus on − Systems analysis Systems design Systems Analysis It is a process of collecting and interpreting facts, identifying the problems, and decomposition of a system into its components. System analy...

Data Structure & Algorithm Basic Concepts [Part - 1]

  Data Definition Data Definition defines a particular data with the following characteristics. Atomic  − Definition should define a single concept. Traceable  − Definition should be able to be mapped to some data element. Accurate  − Definition should be unambiguous. Clear and Concise  − Definition should be understandable. Data Object Data Object represents an object having a data. Data Type Data type is a way to classify various types of data such as integer, string, etc. which determines the values that can be used with the corresponding type of data, the type of operations that can be performed on the corresponding type of data. There are two data types − Built-in Data Type Derived Data Type Built-in Data Type Those data types for which a language has built-in support are known as Built-in Data types. For example, most of the languages provide the following built-in data types. Integers Boolean (true, false) Floating (Decimal numbers) Character and Strings ...

Full Java Tutorial

Introduction to Java + Installing Java JDK and IntelliJ IDEA for Java #1   Introduction to Java + Installing Java JDK and IntelliJ IDEA for Java Java is one of the most popular programming languages because it is used in various tech fields like app development, web development, client-server applications, etc. Java is an object-oriented programming language developed by Sun Microsystems of the USA in 1991. It was originally called Oak by James Goslin. He was one of the inventors of Java. Java = Purely Object-Oriented. How Java Works? The source code in Java is first compiled into the bytecode. Then the Java Virtual Machine(JVM) compiles the bytecode to the machine code. Java Installation: Step 1:  Downloading JDK  JDK stands for Java Development Kit. It contains Java Virtual Machine(JVM) and Java Runtime Environment(JRE). JDK –  Java Development Kit = Collection of tools used for developing and running java programs. JRE –  Java Runtime Environment = Helps in e...