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

C भाषा में malloc क्या है?


C लाइब्रेरी मेमोरी एलोकेशन फंक्शन void *malloc(size_t size) अनुरोधित मेमोरी को एलोकेट करता है और इसके लिए एक पॉइंटर लौटाता है।

मेमोरी एलोकेशन फंक्शन्स

मेमोरी को दो तरीकों से एलोकेट किया जा सकता है:

C भाषा में malloc क्या है?

एक बार कंपाइल टाइम पर मेमोरी एलोकेट हो जाने के बाद, इसे एक्जीक्यूशन के दौरान बदला नहीं जा सकता। इससे या तो मेमोरी की कमी या बर्बादी की समस्या होती है।

समाधान है मेमोरी को डायनामिकली बनाना यानी प्रोग्राम के एक्जीक्यूशन के दौरान यूजर की आवश्यकता के अनुसार।

डायनामिक मेमोरी मैनेजमेंट के लिए उपयोग की जाने वाली स्टैंडर्ड लाइब्रेरी फंक्शन्स निम्नलिखित हैं:

  • malloc()
  • calloc()
  • realloc()
  • free()

malloc() फंक्शन

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

malloc() का सिंटैक्स निम्नलिखित है:

void *malloc(size_t size)

उदाहरण 1

निम्नलिखित उदाहरण malloc() फंक्शन के उपयोग को दर्शाता है:

int *ptr;
ptr = (int *) malloc(1000);
int *ptr;
ptr = (int *) malloc(n * sizeof(int));

नोट: यदि मेमोरी फ्री नहीं है तो यह NULL लौटाता है।

उदाहरण प्रोग्राम

नीचे दिया गया C प्रोग्राम डायनामिक मेमोरी एलोकेशन फंक्शन - malloc() को दर्शाता है।

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

void main() {
    // वेरिएबल्स और पॉइंटर घोषित करना
    int numofele, i;
    int *p;
    
    // एलिमेंट्स को इनपुट के रूप में पढ़ना
    printf("ऐरे में एलिमेंट्स की संख्या दर्ज करें: ");
    scanf("%d", &numofele);
    
    // malloc फंक्शन घोषित करना
    p = (int *) malloc(numofele * (sizeof(int)));
    
    // पॉइंटर्स के ऐरे में एलिमेंट्स पढ़ना
    for (i = 0; i < numofele; i++) {
        p[i] = i + 1;
        printf("ऐरे का एलिमेंट %d है: %d\n", i, p[i]);
    }
}

आउटपुट

उपरोक्त प्रोग्राम को निष्पादित करने पर निम्नलिखित परिणाम प्राप्त होता है:

ऐरे में एलिमेंट्स की संख्या दर्ज करें: 4
ऐरे का एलिमेंट 0 है: 1
ऐरे का एलिमेंट 1 है: 2
ऐरे का एलिमेंट 2 है: 3
ऐरे का एलिमेंट 3 है: 4

उदाहरण 2

निम्नलिखित C प्रोग्राम डायनामिक मेमोरी एलोकेशन फंक्शन्स का उपयोग करके एलिमेंट्स प्रदर्शित करता है -

पहले पांच ब्लॉक्स खाली होने चाहिए, दूसरे पांच ब्लॉक्स में लॉजिक होना चाहिए।

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

void main() {
    // वेरिएबल्स और पॉइंटर्स, sum घोषित करना
    int numofe, i, sum = 0;
    int *p;
    
    // यूजर से एलिमेंट्स की संख्या पढ़ना
    printf("एलिमेंट्स की संख्या दर्ज करें: ");
    scanf("%d", &numofe);
    
    // malloc() फंक्शन कॉल करना
    p = (int *) malloc(numofe * sizeof(int));
    
    /* आउटपुट प्रिंट करना - 
     * हमें if स्टेटमेंट का उपयोग करना होगा क्योंकि हमें जांचना होगा कि क्या मेमोरी
     * सफलतापूर्वक एलोकेट/रिजर्व हुई है या नहीं
     */
    if (p == NULL) {
        printf("मेमोरी उपलब्ध नहीं है");
        exit(0);
    }
    
    // एलिमेंट्स प्रिंट करना
    printf("एलिमेंट्स दर्ज करें: \n");
    for (i = 0; i < numofe; i++) {
        scanf("%d", p + i);
        sum = sum + *(p + i);
    }
    
    printf("\nएलिमेंट्स का योग %d है", sum);
    free(p); // पहले 2 मेमोरी लोकेशन्स क्लियर करना
    
    printf("\nक्लियर की गई मेमोरी लोकेशन प्रदर्शित: \n");
    for (i = 0; i < numofe; i++) {
        printf("%d\n", p[i]); // गार्बेज वैल्यूज़ प्रदर्शित होंगी
    }
}

आउटपुट

उपरोक्त प्रोग्राम को निष्पादित करने पर निम्नलिखित परिणाम प्राप्त होता है:

एलिमेंट्स की संख्या दर्ज करें: 5
एलिमेंट्स दर्ज करें:
12 10 24 45 67
एलिमेंट्स का योग 158 है
क्लियर की गई मेमोरी लोकेशन प्रदर्शित:
7804032
0
7799120
0
67

  1. - C में फ़ंक्शन स्पेसिफायर क्या है?

    C और C++ में कुछ फ़ंक्शन स्पेसिफायर हैं। फ़ंक्शन स्पेसिफायर का उपयोग फ़ंक्शन के गुण को निर्दिष्ट करने के लिए किया जाता है। C++ में inline फ़ंक्शन स्पेसिफायर है। C में _Noreturn फ़ंक्शन स्पेसिफायर है। इसका उपयोग यह दर्शाने के लिए किया जाता है कि एक फ़ंक्शन कुछ भी वापस नहीं करेगा। उदाहरण #include int

  1. - C# प्रोग्रामिंग क्या है?

    C# माइक्रोसॉफ्ट द्वारा विकसित एक आधुनिक, सामान्य-उद्देश्य, ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषा है।C# को कॉमन लैंग्वेज इंफ्रास्ट्रक्चर (CLI) के लिए डिज़ाइन किया गया है, जिसमें एक्जीक्यूटेबल कोड और रनटाइम वातावरण शामिल है जो विभिन्न हाई-लेवल लैंग्वेजेस को विभिन्न कंप्यूटर प्लेटफॉर्म और आर्किटेक्चर पर

  1. - C# में Dictionary क्या है?

    परिचय Dictionary<TKey, TValue> कुंजी-मान जोड़े का जेनेरिक कलेक्शन है। तेज़ लुकअप (O(1) औसत) के लिए हैश टेबल आधारित। System.Collections.Generic नेमस्पेस में। घोषणा और उपयोग using System; using System.Collections.Generic; public class Demo { public static void Main() { // घोषण