डायनामिक मेमोरी एलोकेशन क्या है? (Dynamic Memory Allocation In C In Hindi)

हेलो फ्रेंड्स आज के इस आर्टिकल में हम Dynamic Memory Allocation के बारे में बात करने वाले है | 

आज हम विस्तार से जानेंगे कि डायनामिक मेमोरी एलोकेशन क्या है? (What is Dynamic Memory Allocation In C In Hindi) और सी लैंग्वेज में डायनामिक मेमोरी एलोकेशन कैसे करते है?

तो आइये बिना समय सबसे पहले जानते है कि Dynamic Memory Allocation Kya Hai?

डायनामिक मेमोरी एलोकेशन क्या है? (Dynamic Memory Allocation in C in Hindi)

डायनामिक मेमोरी एलोकेशन क्या है? (What is Dynamic Memory Allocation In C In Hindi)

डायनामिक मेमोरी एलोकेशन एक ऐसा तरीका है जिसकी मदद से, सी लैंग्वेज में हम प्रोग्राम execution के समय (runtime में) ही मेमोरी allocate कर सकते है | 

सी एक structured प्रोग्रामिंग लैंग्वेज है जिसमे प्रोग्रामिंग के कुछ fix रूल है | जिसमे से एक रूल है Array से सम्बंधित | 

Array कई सारे Element का एक ग्रुप है जिसमे सभी Element को contiguous फॉर्म में मेमोरी allocate होती है | सी लैंग्वेज में ऐरे की साइज एक बार डिक्लेअर करने के बाद उसमे आगे चलके कोई बदलाव नहीं कर सकते | 

For Example  – :

मान लीजिये हमारे प्रोग्राम में 9 Element का एक ऐरे है और यदि प्रोग्राम में हमे केवल 5 Element की ही जरुरत पड़ती है तो बाकि के Array Element को मिली मेमोरी का Wastage (हानि) हो जायेगा |

साथ ही यदि प्रोग्राम में 9 Array Element फुल हो जाता है और हमे 5 और एक्स्ट्रा Element चाहिए होगा तो हम ऐरे की साइज 9 से 14 नहीं कर पाएंगे | 

ऐसे में इस प्रॉब्लम को सोल्व करने के लिए Dynamic Memory Allocation का कांसेप्ट आया | 

Dynamic Memory Allocation में हम प्रोग्राम executation के समय ही जितने साइज की मेमोरी चाहिए होती है उतने साइज की मेमोरी allocate कर सकते है | 

memory management functions (malloc(), calloc(), realloc() और free() ) का उपयोग मेमोरी एलोकेशन और deallocation (मेमोरी को फ्री करने) के लिए किया जाता है इन फंक्शन का डेफिनेशन <stdlib.h> हैडर फाइल्स में होता है | 

डायनामिक मेमोरी को मैनेज और एक्सेस करने के लिए पॉइंटर का उपयोग किया जाता है सी लैंग्वेज में आप बिना पॉइंटर के डायनामिक मेमोरी एलोकेशन नहीं कर सकते क्योकि पॉइंटर ही एक ऐसा वेरिएबल है जो उस डायनामिक मेमोरी का एड्रेस पॉइंट कर पायेगा और इससे ही हम उस डायनामिक मेमोरी को एक्सेस कर पाएंगे | 

पॉइंटर के बारे में आप यहाँ से विस्तार से जान सकते है -:

आइये अब हम memory management functions (malloc(), calloc(), realloc() and free() )  के बारे में एक एक करके विस्तार से जानते है |

FunctionSyntax
malloc()malloc (number *sizeof(int));
calloc()calloc (number, sizeof(int));
realloc()realloc (pointer_name, number * sizeof(int));
free()free (pointer_name);

malloc() function in C

malloc () फंक्शन का उपयोग प्रोग्राम Execution के समय dynamically मेमोरी allocate करने के लिए किया जाता है | malloc () फंक्शन की मदद से allocate की गई डयनमिक मेमोरी में by default गार्बेज वैल्यू होती है | 

जब malloc() फंक्शन required मेमोरी allocate नहीं कर पता तब यह NULL पॉइंटर रिटर्न करता है | 

इसका सिंटेक्स कुछ ऐसा होता है -:

Syntax -:

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

For Example -:

ptr = (int*) malloc(100 * sizeof(int));

int की साइज 4 बाइट होती है और इस ऊपर दिए गए उदाहरण में हमने (int*) malloc(100 * sizeof(int)); करके 400 बाइट की Dynamic मेमोरी allocate की है | 

यहाँ ptr पॉइंटर इस 400 बाइट वाले मेमोरी का फर्स्ट एड्रेस होल्ड करता है और जैसे की हम जानते है पॉइंटर जिसका भी एड्रेस होल्ड करता है वो उसको पॉइंट करता है | 

नोट – यदि कंप्यूटर मेमोरी में इतना स्पेस नहीं है जितना डायनामिक मेमोरी एलोकेशन के समय मांग की गई है तब यह NULL पॉइंटर रिटर्न करता है | 

आइये malloc() फंक्शन को हम एक उदाहरण के द्वारा और अच्छे से समझते है |

Example -:

#include<stdio.h>  
#include<stdlib.h>  
int main()
{  
    int n,i,*ptr;
    printf("Enter number of elements: ");    
    scanf("%d",&n);    

   //memory allocated using malloc  
    ptr=(int*)malloc(n*sizeof(int));    
    if(ptr==NULL)                         
    {    
        printf("Sorry! unable to allocate memory");    
        exit(0);    
    }  
  else 
   {
        printf("Memory successfully allocated using malloc.\n");
        printf("Enter elements of array: ");    
        for(i=0;i<n;++i)    
    {    
        scanf("%d",ptr+i);   
     }    
   }
free(ptr);   
    
return 0;  
}    

Output -:

Enter number of elements: 5
Memory successfully allocated using malloc
Enter elements of array:
10
20
30
40
50

इस उदाहरण में हमने सबसे पहले यूजर से एक नंबर इनपुट कराया, फिर हमे उतने ही साइज का स्पेस dynamically मेमोरी में allocate कर दिया | 

इस डायनामिक मेमोरी का एड्रेस ptr पॉइंटर होल्ड करता है जो कि इस प्रोग्राम के समाप्ति के साथ ही नष्ट हो जायेगा इसलिए हमे इस डायनामिक मेमोरी को मिला मेमोरी स्पेस फ्री करना जरुरी है वरना मेमोरी का हानि हो जायेगा | 

डायनामिक मेमोरी को फ्री करने के लिए free() फंक्शन का उपयोग किया जाता है इस free() फंक्शन के बारे में हम आगे विस्तार से जानेंगे अभी हम calloc() फंक्शन के बारे में जान लेते है | 

calloc() function in C

calloc() फंक्शन की मदद से हम मेमोरी के कई सारे ब्लॉक dynamically allocate कर सकते है | इसका उपयोग ऐरे और स्ट्रक्चर जैसे काम्प्लेक्स data structures की मेमोरी allocate करने के लिए किया जाता है | 

यह malloc() फंक्शन की ही तरह dynamically मेमोरी allocate करता है मगर calloc() का उपयोग मेमोरी स्पेस की मल्टीप्ल ब्लॉक allocate करने के लिए किया जाता है और malloc() का उपयोग मेमोरी स्पेस का सिंगल ब्लॉक allocate  करने के लिए किया जाता है | 

malloc() की मदद से बने डायनामिक मेमोरी में by default गार्बेज वैल्यू है जबकि calloc() की मदद से बने डायनामिक मेमोरी में by default शून्य इनिशियलाइज़ होता है | 

यदि calloc() फंक्शन की मदद से डायनामिक मेमोरी allocate करते समय मेमोरी में पर्याप्त स्पेस न हो तो यह Null रिटर्न करता है | 

Syntax -:

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

यहाँ n, no. of elements को रिप्रेजेंट करता है और element-size प्रत्येक element की साइज क्या होगी ये बताता है |

For Example -:

ptr = (float*) calloc(25, sizeof(float));

यह स्टेटमेंट मेमोरी में 25 element allocate करेगा और प्रत्येक element को साइज़ float डेटा टाइप की साइज के बराबर होगी |  

आइये calloc() फंक्शन को हम एक उदाहरण से समझते है 

Example -:

#include<stdio.h>  
#include<stdlib.h>  
int main()
{  
    int n,i,*ptr;
    printf("Enter number of elements: ");    
    scanf("%d",&n);    

   //memory allocated using calloc    
    ptr=(int*)calloc(n,sizeof(int));  
    if(ptr==NULL)                         
    {    
        printf("Sorry! unable to allocate memory");    
        exit(0);    
    }    
   else 
  {
      printf("Memory successfully allocated using calloc.\n");
   }
    free(ptr);    
return 0; 
}

Output -:

Enter number of elements: 5
Memory successfully allocated using calloc

इस उदाहरण में हमने यूजर से जितने साइज का मेमोरी allocate करना चाहता है उसके लिए एक नंबर इनपुट लिया और एक if कंडीशन के द्दारा ये चेक किया कि मेमोरी allocate हुवा है या नहीं | 

realloc() function in C

malloc() or calloc() की मदद से बने डायनामिक मेमोरी के  साइज को बदलने के लिए realloc() का उपयोग किया जाता है | realloc() फंक्शन की मदद से हम आसानी से डायनामिक मेमोरी के साइज में बदलाव कर सकते है | 

यदि हमे डायनामिक मेमोरी का साइज बढ़ाना या  घटाना हो तो हम realloc() फंक्शन का उपयोग करते है | 

Syntax of realloc() Function -:

ptr=realloc(ptr, new-size)  

यहाँ ptr नए साइज के साथ reallocate किया जायेगा | 

Example -:

#include <stdio.h>
#include <stdlib.h>

int main()
{
   int* ptr, n, i;

 // Get the number of elements for the array
    printf("Enter a Number");
    scanf("%d", &n);

// Dynamically allocate memory using calloc()
     ptr = (int*)calloc(n, sizeof(int));
     
// Check if the memory has been successfully allocated by malloc or not
	
   if (ptr == NULL) 
       {
          printf("Memory not allocated.\n");
	 exit(0);
	}
  else 
   {
	 printf("Memory successfully allocated using calloc.\n");
                 
	 // Get the elements of the array
           
        printf("Enter number of elements: %d\n", n);
		
         for (i = 0; i < n; ++i)
                  {
			ptr[i] = i + 1;
		}
      
	printf("The elements of the array are: ");
		for (i = 0; i < n; ++i) {
			printf("%d, ", ptr[i]);
		}

	// Get the new size for the array
		n = 10;
       
       printf("\n\nEnter the new size of the array: %d\n", n);
		
       // Dynamically re-allocate memory using realloc()
		ptr = realloc(ptr, n * sizeof(int));

	printf("Memory successfully re-allocated using realloc.\n");

	// Get the new elements of the array
		for (i = 5; i < n; ++i) {
			ptr[i] = i + 1;
		}

	printf("The elements of the array are: ");
		for (i = 0; i < n; ++i) {
			printf("%d, ", ptr[i]);
		}

	free(ptr);
	}

	return 0;
}

Output -:

Enter a number 3
Memory successfully allocated using calloc.
Enter number of elements: 3
The elements of the array are: 1, 2, 3

Enter the new size of the array: 10
Memory successfully re-allocated using realloc.
The elements of the array are: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,

इस उदाहरण में हमने यूजर से एक नंबर इनपुट कराया और फिर उस इनपुट नंबर के हिसाब से हमने malloc() फंक्शन की मदद dynamically मेमोरी allocate किया |  इस डायनामिक मेमोरी की साइज को हमने realloc() फंक्शन की मदद से बाद में बदलकर 10 कर दिया | 

free() function in C

malloc() or calloc() functions की मदद से बने डायनामिक मेमोरी को deallocate या रिलीज़ करने के लिए free() फंक्शन का उपयोग किया जाता है | 

free() फंक्शन के द्दारा हम मेमोरी हानि को रोकते है यदि हम free() फंक्शन का उपयोग डायनामिक allocate मेमोरी को रिलीज़ या deallocate करने के लिए नहीं करते तो ये मेमोरी researve ही रहती चाहे इनका प्रोग्राम में उपयोग हो या न हो | 

Syntax -:

free(ptr);

यहाँ prt एक पॉइंटर वेरिएबल है जो डायनामिक मेमोरी स्पेस को पॉइंटर करता है | हम इस पॉइंटर वेरिएबल और free() फंक्शन की मदद से डायनामिक allocated मेमोरी को रिलीज़ कर रहे है |  

Example -:

#include <stdio.h>
#include <stdlib.h>

int main() 
{
  int n, i, *ptr;

  printf("Enter number of elements: ");
  scanf("%d", &n);

  ptr = (int*) malloc(n * sizeof(int));
 
  // if memory cannot be allocated
  if(ptr == NULL) {
    printf("Error! memory not allocated.");
    exit(0);
  }

  printf("Enter elements: ");
  for(i = 0; i < n; ++i) {
    scanf("%d", ptr + i);
    sum += *(ptr + i);
  }
  
  // deallocating the memory
  free(ptr);

  return 0;
}

Conclusion 

दोस्तों आशा करता हु कि आज के इस आर्टिकल को पढ़ने के बाद आपको डायनामिक मेमोरी एलोकेशन क्या है? (Dynamic Memory Allocation In C In Hindi) और सी लैंग्वेज में डायनामिक मेमोरी एलोकेशन कैसे करते है? से संबंधित सभी जानकारी मिल गई होगी और आपको और कही इसके बारे में सर्च करना नहीं पड़ेगा |

अगर आप सी लैंग्वेज का Complete Tutorial चाहते है तो मेरे इस पोस्ट C Language Tutorial In Hindi को देखे यहाँ आपको C Programming Language के सभी टॉपिक्स step by step मिल जाएगी |

दोस्तों आशा करता हु कि आपको ये पोस्ट पसंद आई होगी और आपको डायनामिक मेमोरी एलोकेशन क्या है? (What is Dynamic Memory Allocation In C In Hindi) के बारे में काफी जानकरी हुई होगी |

अगर आपको ये पोस्ट पसंद आया है तो इस पोस्ट को अपने अपने दोस्तों को शेयर करना न भूलिएगा ताकि उनको भी ये जानकारी प्राप्त हो सके |

अगर आपको अभी भी Dynamic Memory Allocation Kay Hai से संबंधित कोई भी प्रश्न या Doubt है तो आप जरूर बताये मैं आपके सभी सवालों का जवाब दूँगा और ज्यादा जानकारी के लिए आप हमसे संपर्क कर सकते है |

एसी ही नया टेक्नोलॉजी ,Programming Language, Coding , C Language, C++, Python Course , Java Tutorial से रिलेटेड जानकारियाँ पाने के लिए हमारे इस वेबसाइट को सब्सक्राइब कर दीजिए | जिससे हमारी आने वाली नई पोस्ट की सूचनाएं जल्दी प्राप्त होगी |

Jeetu Sahu is A Web Developer | Computer Engineer | Passionate about Coding, Competitive Programming and Blogging

Leave a Comment