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

हीप ओवरफ्लो और स्टैक ओवरफ्लो


हीप ओवरफ्लो

हीप का उपयोग डायनामिक वेरिएबल्स को स्टोर करने के लिए किया जाता है। यह प्रोसेस की मेमोरी का एक क्षेत्र है। 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));    } }

स्टैक ओवरफ्लो

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

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

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

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

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

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

int main() {    A[20000][20000]; }

  1. स्टैक और हीप के बीच अंतर (Difference Between Stack and Heap) स्टैक और हीप के बीच अंतर (Difference Between Stack and Heap)

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

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

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

  1. C++ में डोमिनो और ट्रोमिनो टाइलिंग C++ में डोमिनो और ट्रोमिनो टाइलिंग

    मान लीजिए हमारे पास दो प्रकार के आकार हैं, डोमिनो और ट्रोमिनो। उन्हें नीचे दिखाए अनुसार घुमाया जा सकता है:एक टाइलिंग में, प्रत्येक वर्ग को एक टाइल द्वारा कवर किया जाना चाहिए। यहां दो टाइलिंग तभी अलग हैं जब बोर्ड पर दो 4-दिशात्मक आसन्न सेल हों जैसे कि उन टाइलिंग में से केवल एक में दोनों वर्ग एक टाइल