malloc()
फ़ंक्शन malloc() का उपयोग अनुरोधित आकार के बाइट्स को एलोकेट करने के लिए किया जाता है और यह एलोकेटेड मेमोरी के पहले बाइट के लिए एक पॉइंटर लौटाता है। यदि विफल होता है तो यह null पॉइंटर लौटाता है।
यहां C++ भाषा में malloc() का सिंटैक्स है:
pointer_name = (cast-type*) malloc(size);
यहां,
pointer_name - पॉइंटर को दिया गया कोई भी नाम।
cast-type - वह डेटाटाइप जिसमें आप malloc() द्वारा एलोकेटेड मेमोरी को कास्ट करना चाहते हैं।
size - बाइट्स में एलोकेटेड मेमोरी का आकार।
यहां C भाषा में malloc() का एक उदाहरण है:
उदाहरण
#include <stdio.h>
#include <stdlib.h>
int main() {
int n = 4, i, *p, s = 0;
p = (int*) malloc(n * sizeof(int));
if (p == NULL) {
printf("\nएरर! मेमोरी एलोकेट नहीं हुई।");
exit(0);
}
printf("\nऐरे के तत्व दर्ज करें: ");
for (i = 0; i < n; ++i) {
scanf("%d", p + i);
s += *(p + i);
}
printf("\nयोग: %d", s);
return 0;
}
आउटपुट
ऐरे के तत्व दर्ज करें: 32 23 21 8 योग: 84
उपरोक्त प्रोग्राम में, चार वेरिएबल्स घोषित किए गए हैं और उनमें से एक पॉइंटर वेरिएबल *p है जो malloc द्वारा एलोकेटेड मेमोरी को स्टोर कर रहा है। हम तत्वों का योग प्रिंट कर रहे हैं।
new()
new ऑपरेटर हीप में मेमोरी एलोकेशन का अनुरोध करता है। यदि पर्याप्त मेमोरी उपलब्ध है, तो यह मेमोरी को पॉइंटर वेरिएबल में इनिशियलाइज़ करता है और इसका एड्रेस लौटाता है।
यहां C++ भाषा में new ऑपरेटर का सिंटैक्स है:
pointer_variable = new datatype;
मेमोरी इनिशियलाइज़ करने का सिंटैक्स:
pointer_variable = new datatype(value);
मेमोरी ब्लॉक एलोकेट करने का सिंटैक्स:
pointer_variable = new datatype[size];
यहां C++ भाषा में new ऑपरेटर का एक उदाहरण है:
उदाहरण
#include <iostream>
using namespace std;
int main() {
int *ptr1 = NULL;
ptr1 = new int;
float *ptr2 = new float(223.324);
int *ptr3 = new int[28];
*ptr1 = 28;
cout << "पॉइंटर वेरिएबल 1 का मान: " << *ptr1 << endl;
cout << "पॉइंटर वेरिएबल 2 का मान: " << *ptr2 << endl;
if (!ptr3)
cout << "मेमोरी एलोकेशन विफल\n";
else {
for (int i = 10; i < 15; i++)
ptr3[i] = i + 1;
cout << "ब्लॉक में स्टोर करने के लिए मान: ";
for (int i = 10; i < 15; i++)
cout << ptr3[i] << " ";
}
return 0;
}
आउटपुट
पॉइंटर वेरिएबल 1 का मान: 28 पॉइंटर वेरिएबल 2 का मान: 223.324 ब्लॉक में स्टोर करने के लिए मान: 11 12 13 14 15
उपरोक्त प्रोग्राम में, तीन पॉइंटर वेरिएबल्स ptr1, ptr2 और ptr3 के रूप में घोषित किए गए हैं। पॉइंटर वेरिएबल्स ptr1 और ptr2 को new() का उपयोग करके मान के साथ इनिशियलाइज़ किया गया है और ptr3 new() फ़ंक्शन द्वारा एलोकेटेड मेमोरी ब्लॉक को स्टोर कर रहा है।
malloc() और new() में मुख्य अंतर
| विशेषता | malloc() | new() |
|---|---|---|
| प्रकार | लाइब्रेरी फ़ंक्शन | ऑपरेटर (कीवर्ड) |
| हेडर | <stdlib.h> / <cstdlib> | कोई हेडर आवश्यक नहीं |
| रिटर्न टाइप | void* (कास्टिंग आवश्यक) | सटीक टाइप पॉइंटर (कास्टिंग आवश्यक नहीं) |
| कंस्ट्रक्टर कॉल | नहीं | हां (ऑब्जेक्ट्स के लिए) |
| डिस्ट्रक्टर कॉल | नहीं (free() मैन्युअल) | हां (delete के साथ) |
| विफलता पर | NULL लौटाता है | std::bad_alloc एक्सेप्शन फेंकता है |
| रीसाइज़ | realloc() का उपयोग करें | संभव नहीं (new[]/delete[] उपयोग करें) |