C लाइब्रेरी मेमोरी एलोकेशन फंक्शन void *malloc(size_t size) अनुरोधित मेमोरी को एलोकेट करता है और इसके लिए एक पॉइंटर लौटाता है।
मेमोरी एलोकेशन फंक्शन्स
मेमोरी को दो तरीकों से एलोकेट किया जा सकता है:

एक बार कंपाइल टाइम पर मेमोरी एलोकेट हो जाने के बाद, इसे एक्जीक्यूशन के दौरान बदला नहीं जा सकता। इससे या तो मेमोरी की कमी या बर्बादी की समस्या होती है।
समाधान है मेमोरी को डायनामिकली बनाना यानी प्रोग्राम के एक्जीक्यूशन के दौरान यूजर की आवश्यकता के अनुसार।
डायनामिक मेमोरी मैनेजमेंट के लिए उपयोग की जाने वाली स्टैंडर्ड लाइब्रेरी फंक्शन्स निम्नलिखित हैं:
- malloc()
- calloc()
- realloc()
- free()
malloc() फंक्शन
यह फंक्शन रनटाइम पर बाइट्स में मेमोरी का ब्लॉक एलोकेट करने के लिए उपयोग किया जाता है। यह एक वॉइड पॉइंटर लौटाता है, जो एलोकेटेड मेमोरी के बेस एड्रेस को इंगित करता है।
malloc() का सिंटैक्स निम्नलिखित है:
void *malloc(size_t size)
उदाहरण 1
निम्नलिखित उदाहरण malloc() फंक्शन के उपयोग को दर्शाता है:
int *ptr; ptr = (int *) malloc(1000); int *ptr; ptr = (int *) malloc(n * sizeof(int));
नोट: यदि मेमोरी फ्री नहीं है तो यह NULL लौटाता है।
उदाहरण प्रोग्राम
नीचे दिया गया C प्रोग्राम डायनामिक मेमोरी एलोकेशन फंक्शन - malloc() को दर्शाता है।
#include <stdio.h>
#include <stdlib.h>
void main() {
// वेरिएबल्स और पॉइंटर घोषित करना
int numofele, i;
int *p;
// एलिमेंट्स को इनपुट के रूप में पढ़ना
printf("ऐरे में एलिमेंट्स की संख्या दर्ज करें: ");
scanf("%d", &numofele);
// malloc फंक्शन घोषित करना
p = (int *) malloc(numofele * (sizeof(int)));
// पॉइंटर्स के ऐरे में एलिमेंट्स पढ़ना
for (i = 0; i < numofele; i++) {
p[i] = i + 1;
printf("ऐरे का एलिमेंट %d है: %d\n", i, p[i]);
}
}
आउटपुट
उपरोक्त प्रोग्राम को निष्पादित करने पर निम्नलिखित परिणाम प्राप्त होता है:
ऐरे में एलिमेंट्स की संख्या दर्ज करें: 4 ऐरे का एलिमेंट 0 है: 1 ऐरे का एलिमेंट 1 है: 2 ऐरे का एलिमेंट 2 है: 3 ऐरे का एलिमेंट 3 है: 4
उदाहरण 2
निम्नलिखित C प्रोग्राम डायनामिक मेमोरी एलोकेशन फंक्शन्स का उपयोग करके एलिमेंट्स प्रदर्शित करता है -
पहले पांच ब्लॉक्स खाली होने चाहिए, दूसरे पांच ब्लॉक्स में लॉजिक होना चाहिए।
#include <stdio.h>
#include <stdlib.h>
void main() {
// वेरिएबल्स और पॉइंटर्स, sum घोषित करना
int numofe, i, sum = 0;
int *p;
// यूजर से एलिमेंट्स की संख्या पढ़ना
printf("एलिमेंट्स की संख्या दर्ज करें: ");
scanf("%d", &numofe);
// malloc() फंक्शन कॉल करना
p = (int *) malloc(numofe * sizeof(int));
/* आउटपुट प्रिंट करना -
* हमें if स्टेटमेंट का उपयोग करना होगा क्योंकि हमें जांचना होगा कि क्या मेमोरी
* सफलतापूर्वक एलोकेट/रिजर्व हुई है या नहीं
*/
if (p == NULL) {
printf("मेमोरी उपलब्ध नहीं है");
exit(0);
}
// एलिमेंट्स प्रिंट करना
printf("एलिमेंट्स दर्ज करें: \n");
for (i = 0; i < numofe; i++) {
scanf("%d", p + i);
sum = sum + *(p + i);
}
printf("\nएलिमेंट्स का योग %d है", sum);
free(p); // पहले 2 मेमोरी लोकेशन्स क्लियर करना
printf("\nक्लियर की गई मेमोरी लोकेशन प्रदर्शित: \n");
for (i = 0; i < numofe; i++) {
printf("%d\n", p[i]); // गार्बेज वैल्यूज़ प्रदर्शित होंगी
}
}
आउटपुट
उपरोक्त प्रोग्राम को निष्पादित करने पर निम्नलिखित परिणाम प्राप्त होता है:
एलिमेंट्स की संख्या दर्ज करें: 5 एलिमेंट्स दर्ज करें: 12 10 24 45 67 एलिमेंट्स का योग 158 है क्लियर की गई मेमोरी लोकेशन प्रदर्शित: 7804032 0 7799120 0 67