Related Articles

Related Articles

Difference Between malloc() and calloc() with Examples
  • Difficulty Level : Easy
  • Last Updated : 03 Jan, 2020

Pre-requisite: Dynamic Memory Allocation in C using malloc(), calloc(), free() and realloc()

The name malloc and calloc() are library functions that allocate memory dynamically. It means that memory is allocated during runtime(execution of the program) from the heap segment.

  • Initialization: malloc() allocates memory block of given size (in bytes) and returns a pointer to the beginning of the block. malloc() doesn’t initialize the allocated memory. If we try to access the content of memory block(before initializing) then we’ll get segmentation fault error(or maybe garbage values).
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    void* malloc(size_t size);

    chevron_right

    
    

    calloc() allocates the memory and also initializes the allocated memory block to zero. If we try to access the content of these blocks then we’ll get 0.

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    void* calloc(size_t num, size_t size);

    chevron_right

    
    

  • Number of arguments: Unlike malloc(), calloc() takes two arguments:
    1) Number of blocks to be allocated.
    2) Size of each block.
  • Return Value: After successful allocation in malloc() and calloc(), a pointer to the block of memory is returned otherwise NULL value is returned which indicates the failure of allocation.
  • For instance, If we want to allocate memory for array of 5 integers, see the following program:-

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // C program to demonstrate the use of calloc()
    // and malloc()
    #include <stdio.h>
    #include <stdlib.h>
      
    int main()
    {
        int* arr;
      
        // malloc() allocate the memory for 5 integers
        // containing garbage values
        arr = (int*)malloc(5 * sizeof(int)); // 5*4bytes = 20 bytes
      
        // Deallocates memory previously allocated by malloc() function
        free(arr);
      
        // calloc() allocate the memory for 5 integers and
        // set 0 to all of them
        arr = (int*)calloc(5, sizeof(int));
      
        // Deallocates memory previously allocated by calloc() function
        free(arr);
      
        return (0);
    }

    chevron_right

    
    

    We can achieve same functionality as calloc() by using malloc() followed by memset(),



    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    ptr = malloc(size);
    memset(ptr, 0, size);

    chevron_right

    
    

    Note: It would be better to use malloc over calloc, unless we want the zero-initialization because malloc is faster than calloc. So if we just want to copy some stuff or do something that doesn’t require filling of the blocks with zeros, then malloc would be a better choice.

    This article is contributed by Shubham Bansal. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

    Attention reader! Don’t stop learning now. Get hold of all the important C++ Foundation and STL concepts with the C++ Foundation and STL courses at a student-friendly price and become industry ready.




    My Personal Notes arrow_drop_up
Recommended Articles
Page :