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

ढेर अतिप्रवाह और ढेर अतिप्रवाह

हीप ओवरफ़्लो

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

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

ए) यदि हम गतिशील बड़ी संख्या में चर आवंटित करते हैं -

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

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

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

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

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

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

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

ए) यदि किसी फ़ंक्शन को अपने आप में अनंत बार पुनरावर्ती रूप से कहा जाता है, तो स्टैक बड़ी संख्या में स्थानीय चर को संग्रहीत करने में असमर्थ होगा, इसलिए स्टैक ओवरफ़्लो होगा -

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

बी) यदि हम बड़ी संख्या में स्थानीय चर घोषित करते हैं या एक बड़े आयामी सरणी या मैट्रिक्स की घोषणा करते हैं तो परिणामस्वरूप स्टैक ओवरफ़्लो हो सकता है।

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

  1. ढेर और ढेर के बीच अंतर

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

  1. C++ में वृत्त और आयत ओवरलैपिंग

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

  1. डोमिनोज़ और ट्रोमिनो टाइलिंग सी++ . में

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