C- Dynamic memory allocation - allocate function

www.laut‮ut‬ri.com
C- Dynamic memory allocation - allocate function

calloc function

We use the calloc function to allocate memory at run time for derived data types, such as arrays and structures.
Using the calloc function, we can allocate multiple memory blocks of the same size, and all bytes will be set to 0.
This is different from the malloc function used to allocate a single memory space in the previous tutorial.

Calloc syntax

The following is the syntax of the 'calloc' function, which is used to dynamically allocate memory.

ptr = (cast_type *) calloc (n, element_size);

Where, "ptr" is a pointer of type" cast_type".

n is the total block of contiguous Spaces, each of size element_size, which will be allocated using the calloc function.

Calloc example

In the following example, we allocate memory space for three student structure variables.

//student structure
struct student {
  char id[10];
  char firstname[64];
  char lastname[64];
  int score;
};

//new type
typedef struct student candidate;

//student structure pointer
candidate *sptr;

//variables
int no_of_students = 3;

//allocate memory blocks
sptr = (candidate *) calloc (no_of_students, sizeof(candidate));

In the above code, we have allocated three storage space blocks

memberdata typesize
idchar10 bytes
firstnamechar64 bytes
lastnamechar64 bytes
scoreint2 bytes

Write a program in C language and use the calloc function to dynamically allocate memory for the structure

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    
  //student structure
  struct student {
    char id[10];
    char firstname[64];
    char lastname[64];
    int score;
  };
  
  //new type
  typedef struct student candidate;
  
  //student structure pointer
  candidate *sptr;
  candidate *tmp;
  
  //variables
  int no_of_students = 3;
  int i;
  
  //allocate memory blocks
  sptr = (candidate *) calloc (no_of_students, sizeof(candidate));
  
  //get student details
  for(i = 0, tmp = sptr; i < no_of_students; i++, tmp++) {
    printf("Enter detail of student #%d\n", (i+1));
    printf("ID: ");
    scanf("%s", tmp->id);
    printf("First Name: ");
    scanf("%s", tmp->firstname);
    printf("Last Name: ");
    scanf("%s", tmp->lastname);
    printf("Score: ");
    scanf("%d", &tmp->score);
  }
  
  //display student details
  printf("\n\nFollowing are the student details:\n\n");
  for(i = 0, tmp = sptr; i < no_of_students; i++, tmp++) {
    printf("Detail of student #%d\n", (i+1));
    printf("ID: %s\n", tmp->id);
    printf("First Name: %s\n", tmp->firstname);
    printf("Last Name: %s\n", tmp->lastname);
    printf("Score: %d\n", tmp->score);
  }
  
  //free memory location
  free(sptr);

  return 0;
}
Enter detail of student #1
ID: s01
First Name: 
Last Name: 
Score: 8
Enter detail of student #2
ID: s02 
First Name: Jane
Last Name: Doe
Score: 9
Enter detail of student #3
ID: s03
First Name: John
Last Name: Doe
Score: 7

Following are the student details:

Detail of student #1
ID: s01
First Name: 
Last Name: 
Score: 8
Detail of student #2
ID: s02
First Name: Jane
Last Name: Doe
Score: 9
Detail of student #3
ID: s03
First Name: John
Last Name: Doe
Score: 7
Created Time:2017-08-22 15:37:56  Author:lautturi