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

C में हीप ओवरफ्लो और स्टैक ओवरफ्लो


हीप ओवरफ्लो (Heap Overflow)

हीप डायनामिक वेरिएबल्स को स्टोर करने के लिए उपयोग किया जाता है। यह प्रोसेस की मेमोरी का एक क्षेत्र है। malloc(), calloc(), resize() ये सभी बिल्ट-इन फंक्शन्स आमतौर पर डायनामिक वेरिएबल्स को स्टोर करने के लिए उपयोग किए जाते हैं।

हीप ओवरफ्लो तब होता है जब −

A) यदि हम बड़ी संख्या में डायनामिक वेरिएबल्स आवंटित करते हैं −

int main() {
    float *ptr = (int *)malloc(sizeof(float)*1000000.0));
}

B) यदि हम लगातार मेमोरी आवंटित करते हैं और उपयोग के बाद फ्री नहीं करते।

int main() {
    for (int i=0; i<100000000000; i++) {
        int *p = (int *)malloc(sizeof(int));
    }
}

स्टैक ओवरफ्लो (Stack Overflow)

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

यदि कोई प्रोग्राम अधिक मेमोरी स्पेस का उपभोग करता है, तो स्टैक ओवरफ्लो होगा क्योंकि कंप्यूटर मेमोरी में स्टैक का आकार सीमित होता है।

स्टैक ओवरफ्लो तब होता है जब −

C) यदि कोई फंक्शन अनंत बार स्वयं द्वारा रिकर्सिवली कॉल किया जाता है तो स्टैक बड़ी संख्या में लोकल वेरिएबल्स को स्टोर करने में असमर्थ होगा, इसलिए स्टैक ओवरफ्लो होगा −

void calculate(int a) {
    if (a == 0)
        return;
    a = 6;
    calculate(a);
}

int main() {
    int a = 5;
    calculate(a);
}

D) यदि हम बड़ी संख्या में लोकल वेरिएबल्स घोषित करते हैं या बड़ी डायमेंशनल ऐरे या मैट्रिक्स घोषित करते हैं तो स्टैक ओवरफ्लो हो सकता है।

int main() {
    int A[20000][20000];
}
  1. स्टैक और हीप के बीच अंतर (Difference Between Stack and Heap) स्टैक और हीप के बीच अंतर (Difference Between Stack and Heap)

    इस पोस्ट में, हम स्टैक (Stack) और हीप (Heap) के बीच अंतर को समझेंगे। स्टैक (Stack) यह एक रैखिक डेटा संरचना है। मेमोरी एक सन्निहित (contiguous) ब्लॉक में आवंटित की जाती है। स्टैक के लिए मेमोरी कंपाइलर के निर्देशों का उपयोग करके स्वचालित रूप से आवंटित और डिएलोकेट की जाती है। स्टैक बनाने और बनाए रखन

  1. C प्रोग्राम: आयत का क्षेत्रफल और परिमाप C प्रोग्राम: आयत का क्षेत्रफल और परिमाप

    एक आयत की लंबाई और चौड़ाई दी गई है, हमें उसका क्षेत्रफल और परिमाप निकालना है। आयत एक 2-D आकृति है जिसमें चार भुजाएं और चार 90° के कोण होते हैं। विपरीत भुजाएं समान होती हैं। विकर्ण भी समान होते हैं। क्षेत्रफल = लंबाई × चौड़ाई परिमाप = 2 × (लंबाई + चौड़ाई) उदाहरण इनपुट: 20 30 आउटपुट: area of rectangl

  1. C++ में वृत्त और आयत के ओवरलैप की जांच C++ में वृत्त और आयत के ओवरलैप की जांच

    मान लीजिए हमारे पास एक वृत्त है जिसे (त्रिज्या, xc, yc) से दर्शाया जाता है, जहां (xc, yc) केंद्र के निर्देशांक हैं। हमारे पास एक अक्ष-संरेखित आयत भी है जिसे (x1, y1, x2, y2) से दर्शाया जाता है, जहां (x1, y1) निचले-बाएं कोने के निर्देशांक हैं और (x2, y2) ऊपरी-दाएं कोने के निर्देशांक हैं। हमें जांचना