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

C प्रोग्रामिंग में डायनामिक मेमोरी आवंटन (Dynamic Memory Allocation)


डायनामिक मेमोरी आवंटन क्या है?

प्रोग्राम निष्पादन के दौरान (रनटाइम) मेमोरी आवंटित करना। कंपाइल टाइम पर आकार निश्चित नहीं होता।

मुख्य फंक्शन्स (stdlib.h)

फंक्शनउद्देश्यप्रारंभिकरण
malloc(size)बाइट्स में ब्लॉक आवंटितअनारंभिकृत (कचरा)
calloc(n, size)n तत्वों के लिए सन्निहित ब्लॉकशून्य-प्रारंभिकृत
realloc(ptr, new_size)आवंटित ब्लॉक का आकार बदलेंनया भाग अनारंभिकृत
free(ptr)पहले आवंटित मेमोरी मुक्त करें--

विशेषताएं

  • हीप (Heap) मेमोरी क्षेत्र का उपयोग करता है
  • मेमोरी पुनर्उपयोग: free() से जब चाहें मुक्त करें
  • अधिक कुशल: केवल आवश्यकता अनुसार आवंटन
  • धीमा: स्टैटिक आवंटन से धीमा (रनटाइम ओवरहेड)
  • लचीला: आकार रनटाइम पर तय

उदाहरण: सम और विषम संख्याओं का योग

#include <stdio.h>
#include <stdlib.h>

int main() {
    int n, *arr, even = 0, odd = 0;
    
    printf("तत्वों की संख्या: ");
    scanf("%d", &n);
    
    // आवंटन
    arr = malloc(n * sizeof(int));
    if (arr == NULL) {
        printf("मेमोरी उपलब्ध नहीं\n");
        return 1;
    }
    
    // इनपुट
    printf("%d संख्याएँ दर्ज करें:\n", n);
    for (int i = 0; i < n; i++)
        scanf("%d", &arr[i]);
    
    // प्रोसेस
    for (int i = 0; i < n; i++) {
        if (arr[i] % 2 == 0)
            even += arr[i];
        else
            odd += arr[i];
    }
    
    printf("सम संख्याओं का योग: %d\n", even);
    printf("विषम संख्याओं का योग: %d\n", odd);
    
    free(arr);  // महत्वपूर्ण!
    return 0;
}

आउटपुट

तत्वों की संख्या: 4
4 संख्याएँ दर्ज करें:
35 24 46 12
सम संख्याओं का योग: 82
विषम संख्याओं का योग: 35

सामान्य त्रुटियाँ और समाधान

सर्वोत्तम अभ्यास पैटर्न


// 1. आवंटन + जांच
int *p = malloc(n * sizeof *p);  // sizeof *p टाइप-सेफ
if (!p) { handle_error(); return; }

// 2. उपयोग
for (int i = 0; i < n; i++) p[i] = ...;

// 3. आकार बदलना (यदि आवश्यक)
int *tmp = realloc(p, new_n * sizeof *p);
if (!tmp) { free(p); handle_error(); return; }
p = tmp;

// 4. मुक्ति
free(p);
p = NULL;  // डबल फ्री/डैंगलिंग रोकथाम

उन्नत: कस्टम आवंटक

एम्बेडेड सिस्टम/रियल-टाइम में malloc अनिश्चित हो सकता है। विकल्प:

  • मेमोरी पूल (फिक्स्ड-साइज़ ब्लॉक्स)
  • स्टैक आवंटक (एरिना)
  • alloca() - स्टैक पर, फंक्शन वापसी पर स्वतः मुक्त (सावधानी से उपयोग करें)
  1. डायनामिक आईपी एड्रेस क्या है? डायनामिक आईपी एड्रेस क्या है?

    एक डायनामिक आईपी एड्रेस एक आईपी एड्रेस है जो नेटवर्क के प्रत्येक कनेक्शन, या नोड को स्वचालित रूप से असाइन किया जाता है, जैसे आपका स्मार्टफोन, डेस्कटॉप पीसी, या वायरलेस टैबलेट। आईपी एड्रेस का यह स्वचालित असाइनमेंट एक DHCP सर्वर द्वारा पूरा किया जाता है। DHCP-सर्वर द्वारा असाइन किया गया आईपी एड्रेस ड

  1. नेटवर्किंग में इंटरफेस और सर्विसेज का क्या अर्थ है? नेटवर्किंग में इंटरफेस और सर्विसेज का क्या अर्थ है?

    आम तौर पर एक नेटवर्क सर्विस एक ऐसा एप्लिकेशन होता है जो एप्लिकेशन लेयर और उससे ऊपर चलता है और कंप्यूटर नेटवर्किंग में उपयोग किया जाता है। नेटवर्क सर्विस डेटा स्टोरेज, मैनिपुलेशन, प्रेजेंटेशन और कम्युनिकेशन प्रदान करती है। इसे क्लाइंट-सर्वर आर्किटेक्चर या पीयर-टू-पीयर आर्किटेक्चर का उपयोग करके लागू

  1. C प्रोग्रामिंग में स्टेटिक मेमोरी एलोकेशन का क्या अर्थ है? C प्रोग्रामिंग में स्टेटिक मेमोरी एलोकेशन का क्या अर्थ है?

    मेमोरी को निम्नलिखित दो तरीकों से एलोकेट किया जा सकता है: स्टेटिक मेमोरी एलोकेशन स्टेटिक वेरिएबल आवंटित स्थान के एक ब्लॉक में परिभाषित होता है, जिसका आकार निश्चित होता है। एक बार एलोकेट होने के बाद, इसे कभी फ्री नहीं किया जा सकता। प्रोग्राम में घोषित वेरिएबल के लिए मेमोरी एलोकेट की जाती है। एड्र

© कॉपीराइट https://in.wsxdn.com सर्वाधिकार सुरक्षित
त्रुटिकारणसमाधान
मेमोरी लीकfree() नहीं कियाहर malloc का मिलान free से
डबल फ्रीदो बार free()free के बाद ptr = NULL
डैंगलिंग पॉइंटरfree के बाद उपयोगfree के बाद उपयोग न करें
बफर ओवरफ्लोआवंटित से अधिक लिखनासीमा जांचें, realloc उपयोग करें
अनारंभिकृत उपयोगmalloc के बाद पढ़नाcalloc उपयोग करें या स्वयं प्रारंभिकृत करें