Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C/C++ में malloc() बनाम new()

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[] उपयोग करें)
  1. - C/C++ में putwchar() फंक्शन

    इस लेख में हम C++ STL में putwchar() फंक्शन के कार्य, सिंटैक्स और उदाहरणों पर चर्चा करेंगे। putwchar() क्या है? putwchar() फंक्शन C++ STL में एक इनबिल्ट फंक्शन है, जो हेडर फाइल में परिभाषित है। putwchar() फंक्शन का उपयोग स्टैंडर्ड आउटपुट डिवाइस पर वाइड कैरेक्टर लिखने के लिए किया जाता है। यह फंक्शन

  1. - C/C++ में memcpy() फंक्शन

    इस लेख में हम C++ STL में memcpy() फंक्शन के कार्य, सिंटैक्स और उदाहरणों पर चर्चा करेंगे। memcpy() क्या है? memcpy() फंक्शन C++ STL में एक इनबिल्ट फंक्शन है, जो हेडर फाइल में परिभाषित है। memcpy() फंक्शन का उपयोग मेमोरी के ब्लॉक्स को कॉपी करने के लिए किया जाता है। इस फंक्शन का उपयोग एक मेमोरी लोकेश

  1. C/C++ में AA ट्रीज C/C++ में AA ट्रीज

    कंप्यूटर साइंस में AA ट्री को संतुलित ट्री के एक रूप के रूप में परिभाषित किया गया है जिसे क्रमबद्ध डेटा को कुशलतापूर्वक स्टोर और पुनर्प्राप्त करने के लिए लागू किया जाता है। AA ट्रीज को रेड-ब्लैक ट्री के एक रूपांतर के रूप में माना जाता है, एक प्रकार का बाइनरी सर्च ट्री जो प्रविष्टियों के कुशल जोड़ और