Dynamic Memory Allocation in C


What is dynamic memory allocation?

What are different memory allocation functions in c ?

What is difference between malloc(), calloc() and realloc() functions ?

This tutorial covers concepts of dynamic memory allocation in c. Syntax and use of different functions used for dynamic memory allocation in c have been explained in this tutorial. Use of malloc(), calloc() , ralloc()  and free() functions are explained in this tutorial.

(A) Introduction

When we assign memory statically by declaring the array size within the program ,thus once we declare the array size before use it then there could a scenario once this array become short to hold the more data item. One solution to this problem is allocate the memory at run time.
.Dynamic memory allocation means that allocating the memory at run time as per the necessity.

(B) Difference between static memory allocation and dynamic memory allocation

Difference between dynamic and static memory allocation is as shown in following table.

Static Memory Allocation
Dynamic Memory Allocation
Memory is allotted at compile time
Memory is allotted at run time
Memory cannot be increase during execution of the program
Memory can be increase during  execution of the program
Static memory allocation is done using array
Dynamic memory allocation is done using liked list.


dynamic memory allocation in c programming

 

(C) Dynamic Memory Allocation Functions

There dynamic memory in c allocated using following functions

Most commonly used dynamic memory allocation functions in c area  as follow :

(i) malloc( ): malloc() may be a memory allocation perform that allocates requested size bytes and it returns a pointer to the primary byte of the allotted memory space. The malloc perform returns a pointer of type void thus we are able to assign it to any type of pointer. 

The syntax of the malloc() perform is as follow:

ptr= (cast type *) malloc(byte-size);

where ptr may be a pointer of type cast-type. 

Example, the statement

x=(int *) malloc(10 *sizeof(int))


means a memory space admire ten times the scale of associate degree int byte  is reserved and therefore the address of the primary computer memory unit of memory allotted is assigned to the pointer x of int type..

The malloc function can also allocate space for complex data types such as structures. For
ptr= (struct student*) malloc(sizeof (struct student));
where ptr is a pointer of type struct student.
 
(ii) calloc( ): calloc() is other memory allocation function that allocates space for an array of items, initializes them to zero and so returns a pointer to the memory. This perform is often used for requesting memory space at run time. The syntax of calloc() method is as follow:

ptr= (cast type *) calloc(n, element-size);

This statement allocates contiguous space for n blocks, every of size element-size bytes.

(iii) realloc( ): realloc is a memory allocation function that modifies the size of previously allocated space. Sometime it may happen that the allocated memory space is larger than what is required or it is less than what is required. In both cases, we can change the memory size already allocated with the help of the realloc function known as reallocation of memory.

 For example, if the original allocation is done by statement
ptr= malloc(size);
then reallocation is done by the statement
ptr=realloc(ptr,newsize); 
which will allocate a new memory space of size newsize to the pointer variable ptr and returns a pointer to the first byte of the new memory block
(iv) free() – memory allotted by malloc() and calloc() perform will be unleash with the help
 free() perform.


Syntax of free() perform is as follow


free(ptr);

Leave a Comment

x