C भाषा में, void पॉइंटर्स को ऑब्जेक्ट पॉइंटर टाइप में अंतर्निहित रूप से परिवर्तित किया जाता है। फंक्शन malloc() C89 मानक में void * लौटाता है। C के पुराने संस्करणों में, malloc() char * लौटाता है। C++ भाषा में, डिफ़ॉल्ट रूप से malloc() int मान लौटाता है। इसलिए, पॉइंटर्स को ऑब्जेक्ट पॉइंटर्स में परिवर्तित करने के लिए एक्सप्लिसिट कास्टिंग का उपयोग किया जाता है।
C भाषा में मेमोरी आवंटित करने का सिंटैक्स निम्नलिखित है।
pointer_name = malloc(size);
यहां,
pointer_name − पॉइंटर को दिया गया कोई भी नाम।
size − बाइट्स में आवंटित मेमोरी का आकार।
C भाषा में malloc() का एक उदाहरण निम्नलिखित है।
उदाहरण
#include <stdio.h> #include <stdlib.h> int main() { int n = 4, i, *p, s = 0; p = malloc(n * sizeof(int)); if(p == NULL) { printf("\nError! memory not allocated."); exit(0); } printf("\nसरणी के एलिमेंट्स दर्ज करें: "); for(i = 0; i < n; ++i) { scanf("%d", p + i); s += *(p + i); } printf("\nयोग: %d", s); return 0; } आउटपुट
सरणी के एलिमेंट्स दर्ज करें: 2 28 12 32 योग: 74
उपरोक्त C भाषा के उदाहरण में, यदि हम एक्सप्लिसिट कास्टिंग करते हैं, तो यह कोई त्रुटि नहीं दिखाएगा।
C++ भाषा में मेमोरी आवंटित करने का सिंटैक्स निम्नलिखित है।
pointer_name = (cast-type*) malloc(size);
यहां,
pointer_name − पॉइंटर को दिया गया कोई भी नाम।
cast-type − वह डेटा टाइप जिसमें आप malloc() द्वारा आवंटित मेमोरी को कास्ट करना चाहते हैं।
size − बाइट्स में आवंटित मेमोरी का आकार।
C++ भाषा में malloc() का एक उदाहरण निम्नलिखित है।
उदाहरण
#include <iostream> using namespace std; int main() { int n = 4, i, *p, s = 0; p = (int *)malloc(n * sizeof(int)); if(p == NULL) { cout << "\nError! memory not allocated."; exit(0); } cout << "\nसरणी के एलिमेंट्स दर्ज करें: "; for(i = 0; i < n; ++i) { cin >> (p + i); s += *(p + i); } cout << "\nयोग: ", s; return 0; } आउटपुट
सरणी के एलिमेंट्स दर्ज करें: 28 65 3 8 योग: 104
उपरोक्त C++ भाषा के उदाहरण में, यदि हम एक्सप्लिसिट कास्टिंग नहीं करेंगे, तो प्रोग्राम निम्नलिखित त्रुटि दिखाएगा।
error: invalid conversion from 'void*' to 'int*' [-fpermissive] p = malloc(n * sizeof(int));