Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C/C++ में new/delete और malloc/free में क्या अंतर है?

नया/हटाएं

नया ऑपरेटर ढेर में स्मृति आवंटन के लिए अनुरोध करता है। यदि पर्याप्त मेमोरी उपलब्ध है, तो यह मेमोरी को पॉइंटर वेरिएबल में इनिशियलाइज़ करता है और अपना पता देता है।

डिलीट ऑपरेटर का उपयोग मेमोरी को डीलोकेट करने के लिए किया जाता है। उपयोगकर्ता को इस डिलीट ऑपरेटर द्वारा बनाए गए पॉइंटर वेरिएबल को डीलोकेट करने का विशेषाधिकार है।

यहां C++ भाषा में नए/डिलीट ऑपरेटर का उदाहरण दिया गया है,

उदाहरण

#include <iostream>
using namespace std;

int main () {
   int *ptr1 = NULL;
   ptr1 = new int;
   float *ptr2 = new float(299.121);
   int *ptr3 = new int[28];

   *ptr1 = 28;

   cout << "Value of pointer variable 1 : " << *ptr1 << endl;
   cout << "Value of pointer variable 2 : " << *ptr2 << endl;
   
   if (!ptr3)
   cout << "Allocation of memory failed\n";
   else {
      for (int i = 10; i < 15; i++)
      ptr3[i] = i+1;

      cout << "Value of store in block of memory: ";
      for (int i = 10; i < 15; i++)
      cout << ptr3[i] << " ";
   }
   delete ptr1;
   delete ptr2;
   delete[] ptr3;

   return 0;
}

आउटपुट

यहाँ आउटपुट है

Value of pointer variable 1 : 28
Value of pointer variable 2 : 299.121
Value of store in block of memory: 11 12 13 14 15

मॉलोक/ मुफ़्त

फ़ंक्शन malloc () का उपयोग बाइट्स के अनुरोधित आकार को आवंटित करने के लिए किया जाता है और यह आवंटित मेमोरी के पहले बाइट के लिए एक पॉइंटर देता है। विफल होने पर यह शून्य सूचक देता है।

फ़ंक्शन फ्री () का उपयोग मॉलॉक () द्वारा आवंटित मेमोरी को हटाने के लिए किया जाता है। यह पॉइंटर के मान को नहीं बदलता है जिसका अर्थ है कि यह अभी भी उसी मेमोरी लोकेशन को इंगित करता है।

यहाँ C भाषा में malloc/free का एक उदाहरण दिया गया है,

उदाहरण

#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("\nError! memory not allocated.");
      exit(0);
   }

   printf("\nEnter elements of array : ");

   for(i = 0; i < n; ++i) {
      scanf("%d", p + i);
      s += *(p + i);
   }
   printf("\nSum : %d", s);
   free(p);

   return 0;
}

आउटपुट

यहाँ आउटपुट है -

Enter elements of array : 32 23 21 8
Sum : 84

  1. C++ में सेर और क्लॉग स्ट्रीम में क्या अंतर है?

    cerr और clog दोनों ही stderr स्ट्रीम के ऑब्जेक्ट हैं। उनके बीच अंतर निम्नलिखित हैं। स्पष्ट तस्वीर पाने के लिए आप cout ऑब्जेक्ट के बारे में भी पढ़ सकते हैं। अन-बफरर्ड स्टैंडर्ड एरर स्ट्रीम (cerr) cerr मानक त्रुटि स्ट्रीम है जिसका उपयोग त्रुटियों को आउटपुट करने के लिए किया जाता है। यह भी एक उदाहरण है

  1. C++ में डॉट (.) ऑपरेटर और -> में क्या अंतर है?

    डॉट और एरो ऑपरेटर दोनों का उपयोग C++ में किसी वर्ग के सदस्यों तक पहुंचने के लिए किया जाता है। वे बस विभिन्न परिदृश्यों में उपयोग किए जाते हैं। सी ++ में, वर्ग, संरचना, या संघ के रूप में घोषित प्रकारों को वर्ग प्रकार माना जाता है। तो निम्नलिखित उन तीनों को संदर्भित करता है। a.b का उपयोग केवल तभी किय

  1. C++ में #define और const कीवर्ड में क्या अंतर है?

    #define निर्देश एक प्रीप्रोसेसर निर्देश है; प्रीप्रोसेसर उन मैक्रोज़ को उनके शरीर से बदल देता है इससे पहले कि कंपाइलर इसे देखे। इसे एक स्वचालित खोज के रूप में सोचें और अपने स्रोत कोड की जगह लें। एक const चर घोषणा भाषा में एक वास्तविक चर घोषित करती है, जिसे आप एक वास्तविक चर की तरह उपयोग कर सकते हैं: