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

C/C++ में new/delete और malloc/free का अंतर

new/delete

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

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

उदाहरण

#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 << "पॉइंटर वेरिएबल 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] << " ";
    }
    
    delete ptr1;
    delete ptr2;
    delete[] ptr3;
    return 0;
}

आउटपुट

पॉइंटर वेरिएबल 1 का मान: 28
पॉइंटर वेरिएबल 2 का मान: 299.121
मेमोरी ब्लॉक में संग्रहीत मान: 11 12 13 14 15

malloc/free

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

free() फ़ंक्शन का उपयोग 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);
    free(p);
    return 0;
}

आउटपुट

ऐरे के एलिमेंट्स दर्ज करें: 32 23 21 8
योग: 84
  1. - C++ में cerr और clog स्ट्रीम्स में क्या अंतर है?

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

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

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

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

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