सी डायनामिक मेमोरी अलोकेशन का उपयोग मॉलॉक (), कॉलोक (), फ्री () और रियललॉक ()

इस ट्यूटोरियल में, आप मानक लाइब्रेरी फ़ंक्शंस का उपयोग करके अपने सी प्रोग्राम में मेमोरी को गतिशील रूप से आवंटित करना सीखेंगे: मॉलॉक (), कॉलोक (), फ्री () और रियललॉक ()।

जैसा कि आप जानते हैं, एक सरणी निश्चित मानों का एक संग्रह है। एक बार किसी सरणी का आकार घोषित हो जाने के बाद, आप उसे बदल नहीं सकते।

कभी-कभी आपके द्वारा घोषित सरणी का आकार अपर्याप्त हो सकता है। इस समस्या को हल करने के लिए, आप रन-टाइम के दौरान मैन्युअल रूप से मेमोरी आवंटित कर सकते हैं। इसे C प्रोग्रामिंग में डायनामिक मेमोरी एलोकेशन के रूप में जाना जाता है।

स्मृति गतिशील आवंटित करने के लिए, पुस्तकालय कार्य हैं malloc(), calloc(), realloc()और free()उपयोग किया जाता है। इन कार्यों को हेडर फ़ाइल में परिभाषित किया गया है ।

सी मॉलोक ()

"मॉलॉक" नाम स्मृति आवंटन के लिए है।

malloc()समारोह बाइट्स की निर्धारित संख्या की स्मृति का एक ब्लॉक सुरक्षित रखता है। और, यह एक पॉइंटर लौटाता है voidजिसे किसी भी रूप में संकेत दिया जा सकता है।

सिंटेक्स ऑफ़ मल्कोक ()

 ptr = (castType*) malloc(size);

उदाहरण

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

उपरोक्त कथन स्मृति के 400 बाइट्स आवंटित करता है। ऐसा इसलिए है क्योंकि आकार float4 बाइट्स का है। और, सूचक ptr आवंटित स्मृति में पहले बाइट का पता रखता है।

NULLयदि मेमोरी आवंटित नहीं की जा सकती है तो अभिव्यक्ति एक सूचक में परिणाम करती है ।

सी कॉलोक ()

"कॉलोक" नाम सन्निहित आवंटन के लिए है।

malloc()समारोह आबंटित करता है स्मृति और पत्तियों स्मृति अप्रारंभीकृत। जबकि, calloc()फ़ंक्शन मेमोरी को आवंटित करता है और सभी बिट्स को शून्य पर आरंभीकृत करता है।

कॉलोक का सिंटैक्स ()

 ptr = (castType*)calloc(n, size);

उदाहरण:

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

उपरोक्त कथन प्रकार के 25 तत्वों के लिए स्मृति में सन्निहित स्थान आवंटित करता है float

सी फ्री ()

गतिशील रूप से किसी के साथ बनाई गई स्मृति आवंटित calloc()या malloc()अपने दम पर मुक्त कर दिया प्राप्त करता है। आपको free()अंतरिक्ष को छोड़ने के लिए स्पष्ट रूप से उपयोग करना चाहिए ।

मुफ्त का सिंटेक्स ()

 free(ptr);

यह कथन द्वारा बताई गई मेमोरी में आवंटित स्थान को मुक्त करता है ptr

उदाहरण 1: मालॉक () और मुफ्त ()

 // Program to calculate the sum of n numbers entered by the user #include #include int main() ( int n, i, *ptr, sum = 0; 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); ) printf("Sum = %d", sum); // deallocating the memory free(ptr); return 0; ) 

यहाँ, हमने गतिशील रूप से n संख्या के लिए मेमोरी आवंटित की है int

उदाहरण 2: कॉलोक () और मुफ्त ()

 // Program to calculate the sum of n numbers entered by the user #include #include int main() ( int n, i, *ptr, sum = 0; printf("Enter number of elements: "); scanf("%d", &n); ptr = (int*) calloc(n, sizeof(int)); 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); ) printf("Sum = %d", sum); free(ptr); return 0; ) 

सी रियललोक ()

यदि गतिशील रूप से आवंटित स्मृति अपर्याप्त या आवश्यकता से अधिक है, तो आप realloc()फ़ंक्शन का उपयोग करके पहले से आवंटित मेमोरी का आकार बदल सकते हैं ।

Realloc का सिंटैक्स ()

 ptr = realloc(ptr, x);

यहाँ, ptr को एक नए आकार x के साथ फिर से जोड़ा गया है।

उदाहरण 3: realloc ()

 #include #include int main() ( int *ptr, i , n1, n2; printf("Enter size: "); scanf("%d", &n1); ptr = (int*) malloc(n1 * sizeof(int)); printf("Addresses of previously allocated memory: "); for(i = 0; i < n1; ++i) printf("%u",ptr + i); printf("Enter the new size: "); scanf("%d", &n2); // rellocating the memory ptr = realloc(ptr, n2 * sizeof(int)); printf("Addresses of newly allocated memory: "); for(i = 0; i < n2; ++i) printf("%u", ptr + i); free(ptr); return 0; )

जब आप प्रोग्राम चलाते हैं, तो आउटपुट होगा:

 आकार दर्ज करें: पहले से आवंटित स्मृति के 2 पते: 26855472 26855476 नए आकार दर्ज करें: 4 नई आवंटित स्मृति के पते: 26855472 26855476 26855480 26855484

दिलचस्प लेख...