
C Programming

In this tutorial we will learn about malloc function to dynamically allocate memory in C programming language.
We use the malloc function to allocate a block of memory of specified size.
This function returns a pointer of type void so, we can assign it to any type of pointer variables.
The malloc function will return NULL if it fails to allocate the required memory space.
Following is the syntax of the malloc function.
ptr = (cast_type *) malloc (byte_size);
Where, ptr is a pointer variable of type cast_type and byte_size is the memory size that we want to allocate.
In the following example we are allocating memory space of size 5 bytes to store 5 characters.
// char pointer
char *cptr;
// allocate memory
cptr = (char *) malloc (5 * sizeof(char));
We can represent this in memory as follows.

We are first computing the byte_size i.e., (5 * sizeof(char)).
Note! sizeof(char) gives us 1 byte and we want to save 5 characters so, total memory space needed is 5x1 = 5 bytes. So, byte_size for this example is 5.
We are passing 5 to the malloc function and on successfully allocating the required memory space it returns a void pointer which we cast into char type pointer by writing (char *).
Then we are assigning the first address of the allocated memory space to a character pointer variable cptr.
For this example we will use the malloc function and the byte_size will be (N * sizeof(int)) where, value of N is provided by the user.
We will then convert the pointer to integer type using the casting (int *).
The complete code is given below.
#include <stdio.h>
#include <stdlib.h>
int main(void) {
// integer variables
int N = 0;
int sum = 0;
int i;
// integer pointer variables
int *iptr, *tmp;
// take user input
printf("Enter value of N [1-10]: ");
scanf("%d", &N);
// allocate memory
iptr = (int *) malloc (N * sizeof(int));
// check if memory allocated
if (iptr == NULL) {
printf("Unable to allocate memory space. Program terminated.\n");
return -1;
}
// take integers
printf("Enter %d integer number(s)\n", N);
for (i = 0, tmp = iptr; i < N; i++, tmp++) {
printf("Enter #%d: ", (i+1));
scanf("%d", tmp);
// compute the sum
sum += *tmp;
}
// display result
printf("Sum: %d\n", sum);
// free memory location
free(iptr);
return 0;
}
Output:
Enter value of N [1-10]: 5
Enter 5 integer number(s)
Enter #1: 10
Enter #2: 20
Enter #3: 30
Enter #4: 40
Enter #5: 50
Sum: 150
Memory representation of the above code.

We are assuming that an integer value takes 2 bytes of memory. So, in the above image 10 bytes of memory is allocated to save 5 integer variables from location 1000 to 1009.
Pointer variable iptr is at memory location 8000 and it is assigned the first memory location of the allocated space i.e., 1000.
We are using a temporary integer pointer tmp to take user integer number and save it in the allocated memory location.
Note! If we use the iptr pointer variable to take user integer numbers then in the process we will lose the allocated memory location address. So, its better to work with a copy and keep the allocated memory location address safe.
We are using the free() function to free the allocated memory space.
ADVERTISEMENT