A block of memory may be allocated using the function malloc in c. The malloc function reserves a block of memory of specified size and returns a pointer of type void. This means that we can assign it to any type of pointer. It takes the following form:
ptr = (cast-type *) malloc(byte-size);
ptr is a pointer of type cast-type. The malloc in c returns a pointer (of cast-type) to an area of memory with size byte size.
Example : X = (int *) malloc (100 *sizeof(int)); On successful execution of this statement, a memory space equivalent to “100 times the size of an int’ bytes is reserved and the address of the first byte of the memory allocated is assigned to the pointer x of type of int.
Similarly, the statement cptr = (char*) malloc(10);
allocates 10 bytes of space for the pointer cptr of type char. This is illustrated as:
Note that the storage space allocated dynamically has no name and therefore its contents can be accessed only through a pointer.
We may also use malloc to allocate space for complex data types such as structures. Example:
st_var = (struct store *)malloc (sizeof (struct store));
where, st_var is a pointer of type struct store
Remember, the malloc allocates a block of contiguous bytes. The allocation can fail if the space in the heap is not sufficient to satisfy the request. If it fails, it returns a NULL. We should therefore check whether the allocation is successful before using the memory pointer. This is illustrated in the program.
The program is given in Fig. It tests for availability of memory space of required size. If it is available, then the required space is allocated and the address of the first byte of the space allocated is displayed. The program also illustrates the use of pointer variable for storing and accessing the table values.
Program #include <stdio.h> #include <stdlib.h> #define NULL 0 main() { int *p, *table; int size; printf("\nWhat is the size of table?"); scanf("%d",size); printf("\n") /*----------Memory allocation----------*/ if((table = (int*)malloc(size *sizeof(int))) ==NUL) { printf("No space available \n"); exit(1); } printf("\n Address of the first byte is %u\n", table); /* Reading table values*/ printf("\nInput table values\n"); for (p=table; p<table + size; p++) scanf("%d,p); /* Printing table values in reverse order*/ for (p = table + size -1; p >= table; p--) printf("%d is stored at address %u \n", *p,p); } Output What is the size of the table? 5 Address of the first byte is 2262 Input table values 11 12 13 14 15 15 is stores at address 2270 14 is stores at address 2268 13 is stores at address 2266 12 is stores at address 2264 11 is stores at address 2262