C Tutorial
Let us consider the array declartion,
int marks[100];
Such declarations would typically be used if 100 student's marks were to be stored in memory. 200 bytes are reserved once this declaration is done.
We may store only 60 marks, but reserved 200 bytes and this leads to wastage of memory.
Suppose we may need to store more than 100 student's marks, this leads to falling short in size.
here no way to increase or decrease the array size during program execution. this is also called static memory allocations.
In dynamic memory allocations, program allocates the memory only at runtime.
Allocating memory at runtime can be done using standard library functions malloc() and calloc() functions.
This C program allocates memory for marks during program execution and it is done using malloc standard library function.
In this program, allocating memory to store marks based on number of students user input.
No memory wastage and shortage to store data.
malloc returns void pointer, so type casted to integer pointer.
Once memory is allocated using malloc, garbage value is stored as default.
malloc takes single argument for memory required in bytes.
#include <stdio.h> int main() { int n, avg, i, *mark, sum = 0; printf("Enter number of studers: "); scanf("%d", &n); mark = (int*)malloc(n*2); if(mark == NULL) { printf("Memory allcoation is failed!"); return 0; } for(i=0;i<n;i++) { printf("\nMark %d: ", (i+1)); scanf("%d", (mark+i)); } for(i=0;i<n;i++) sum = sum + *(mark+i); avg = sum / n; printf("Total marks: %d\n", sum); printf("Average marks: %d\n", avg); return 0; }Output:
$ cc dynamic-memory-alloc.c dynamic-memory-alloc.c: In function ‘main’: dynamic-memory-alloc.c:10:16: warning: implicit declaration of function ‘malloc’ [-Wimplicit-function-declaration] mark = (int*)malloc(n*2); ^~~~~~ dynamic-memory-alloc.c:10:16: warning: incompatible implicit declaration of built-in function ‘malloc’ dynamic-memory-alloc.c:10:16: note: include ‘’ or provide a declaration of ‘malloc’ $ ./a.out Enter number of studers: 3 Mark 1: 23 Mark 2: 54 Mark 3: 45 Total marks: 122 Average marks: 40
This C program allocates memory for marks during program execution and it is done using calloc standard library function.
In this program, allocating memory to store marks based on number of students user input.
No memory wastage and shortage to store data.
calloc returns void pointer, so type casted to integer pointer.
Once memory is allocated using calloc, all stores zeros as default.
calloc takes two arguments number of storing elements and each element size (here integer element and size is 2 bytes).
#include <stdio.h> int main() { int n, avg, i, *mark, sum = 0; printf("Enter number of studers: "); scanf("%d", &n); mark = (int*)calloc(n, 2); if(mark == NULL) { printf("Memory allcoation is failed!"); return 0; } for(i=0;i<n;i++) { printf("\nMark %d: ", (i+1)); scanf("%d", (mark+i)); } for(i=0;i7lt;n;i++) sum = sum + *(mark+i); avg = sum / n; printf("Total marks: %d\n", sum); printf("Average marks: %d\n", avg); return 0; }Output:
$ cc dynamic-memory-alloc1.c dynamic-memory-alloc1.c: In function ‘main’: dynamic-memory-alloc1.c:10:16: warning: implicit declaration of function ‘calloc’ [-Wimplicit-function-declaration] mark = (int*)calloc(n, 2); ^~~~~~ dynamic-memory-alloc1.c:10:16: warning: incompatible implicit declaration of built-in function ‘calloc’ dynamic-memory-alloc1.c:10:16: note: include ‘’ or provide a declaration of ‘calloc’ $ ./a.out Enter number of studers: 3 Mark 1: 26 Mark 2: 32 Mark 3: 67 Total marks: 125 Average marks: 41
C Tutorial
Privacy Policy | Copyright2020 - All Rights Reserved. | Contact us
| Report website issues in Github
| Facebook page
| Google+ page