Dynamic Memory Allocation : Calloc ,Relloc और Free in hindi , कैलोक , रिलोक और फ्री क्या है c कंप्यूटर भाषा में

By  
कैलोक , रिलोक और फ्री क्या है c कंप्यूटर भाषा में , Dynamic Memory Allocation : Calloc ,Relloc और Free in hindi  :-
इससे पहले के article मे , हमने malloc function जोकि memory मे specific memory बाइट के block को run time पर allocate करता है |अब इस article मे calloc function,relloc function और free function को पढेगे |

  1. Calloc ()
    calloc () function भी Dynamic Memory Allocation का दूसरा function है जिससे memory block को run time मे allocate करा सकते है |लेकिन ये function deriving data structure के लिय यूसे किया जाता है |
    malloc function specific memory space का पूरा एक block allocate करता है लेकिन calloc मे specific memory को  multiple memory blocks मे allocate किया जाता है |in blocks मे से पहले block का address हमेशा ‘0’ ही assign होता है |इसका syntax होता है :-

pointer _name=(cast type *) calloc(number of block ,block size);

यहा पर :
pointer _name : ये उस pointer का नाम जिसमे allocate memory blocks मे से पहले blocks का address store होता है |
cast type * : इस pointer variable के type को define करता है |
number of block:ये allocate memory block के number को define करता है |
block size : ये single block के size को define करता है |

इसका  उदाहरण है :

a=(int *) calloc(5,sizeof(int));

इस statement से .int size में 5 blocks assign हो जायेगा|सभी block की size integer की size होगी |सभी blocks का address ‘0’ से initial हो जायेगा |और पहले block का address return होगा |अगर space फुल होगा तब null pointer return होगा |

calloc function को struture के साथ use कर सकते है |इसका syntax है :-

pointer _name=(cast type *) calloc(number of structure blocks ,structure size);

यहा पर :
pointer _name : ये उस pointer का नाम जिसमे allocate memory blocks मे से पहले blocks का address store होता है |
cast type * : इस pointer variable के type को define करता है |structure के case मे, structure variable का नाम हो cast type होता है |
number of block:ये allocate structure blocks के number को define करता है |
block size : ये single structure block के size को define करता है |

इसका उदाहरण है :-

struct_variable =(struct student *) calloc(class size ,sizeof(struct student));

इस उदाहरण में, structure student के type का variable struct_variable है |ओए calloc function से structure student के size का number(class size) blocks allocate हो जाते है |

उदाहरण के लिए
#include<conio.h>
#include<stdoio.h>
struct stu
{
char name [20];
int year ;
int salary;
char add[30];
}student;
void main()
{
int *p;d;
int class_size;
printf(“Enter Size of class”);
scanf(“%d”,&class_size);
if(d=(struct student *) calloc(class_size,sizeof(struct student))==NULL)
{
printf(“No more space “);
}
else
{
printf(“Address of first block = %u”,d);
}
for(p=d,i=1;i<class_size;i++,p++ )
{
printf(“Enter data of student “);
scanf(“%s %d %d %s”,p->name,p->year,p->salary,p->add);
}
for(p=d,i=1;i<class_size;i++,p++ )
{
printf(“Detail of student %d”,i);
printf(“Name :%s ,Birth Year :%d  Salary :%d Address:%s\n”,p->name,p->year,p->salary,p->add);
}
free(d);
getch()
}

इस उदाहरण मे ,student का structure variable है |और ‘p’ और ‘t’ दो pointer है |
d=(struct student *) calloc(class_size,sizeof(struct student)) statement से यूजर द्वारा दिए गये class_size की value के अनुसार memory block allocate हो जाते है |प्रत्येक memory block की size single structure student की size के सामान होती है |

2.Free ()
जब किसी compile time variable को allocate किया जाता है तब ये प्रोग्रम के terminate होते ही automated terminate हो जाता है |लेकिन Dynamic Memory Allocation  मे ,allocated space की responsibility प्रोग्रामर पर होती है इसलिए free() का use किया जाता है |
free() function का use, malloc और calloc function से allocate स्पच्वे को डिलीट किया जाता है |इसका syntax है :-
free(Pointer_variable);

इस statement मे ,pointer_variable उस memory space का address को contain करता है जिसे डिलीट करना है |

3.Realloc()
जब allocate space की size छोटी या बड़ी होती है तब इस function का use memory space का size को modify कर सकते है |इस प्रोसेस को reallocation ऑफ़ memory कहते है |इसका syntax है :-

pointer_name = realloc (pointer_name , new size );

इस statement मे , pointer_name एक pointer का नाम होता है जिसे modify करना है |और new size नई allocate memory की size होती है |

realloc() function इस new memory block के first bytes के address को pointer variable मे assign होता है |
कई बार पुराने block मे modification नहीं होता है |अतः इस statement से नया block बनता है पुराने block मे से data नए बोक्क मे transfer हो जाता है |और पुराना block डिलीट हो जाता है |इस फ़ुन्क्त्रिओन से data मे कोई नुकसान नहीं होती है |
अगर function को नए space के लिए जगह नहीं मिलती है तब null pointer return होता है |

उदाहरण के लिए :
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
{
int *p;
if(p=(char *)malloc(10)==NULL)
{
printf(“No more space”);
}
{
strcpy(p,”ParthPatel”);
printf(“Block have = %s”,p);
}
if(p=(Char *)realloc(p,15)==NULL)
{
printf(“No more space”);
}
else
{
printf(“Memory Block Modified”);
strcpy(p,”OmPrakashSaini”);
printf(“Modified Memory Block have=%s”,p);
free(p);
getch();
}

इस उदाहरण मे ,

p=(char *)malloc(10) एक memory block allocate होगा जिसका size 10 bytes है |बाद मे ParthPatel को string मे सेव करा देगे |
बाद मे , p=(Char *)realloc(p,15) से memory block की size को ’10’ से ’15’ मे modified कर देते है |और इसमें OmPrakashSaini को copy करा देते है |


आउटपुट होगा :
Block have = ParthPatel
Modified Memory Block have = OmPrakashSaini