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

सी . में ढेर अतिप्रवाह और ढेर अतिप्रवाह

हीप ओवरफ़्लो

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

    एक आयत की लंबाई और चौड़ाई को देखते हुए हमें उसका क्षेत्रफल और परिमाप ज्ञात करना होता है। आयत 2-डी आकृति है जिसमें चार भुजाएँ और प्रत्येक 90 डिग्री के चार कोण हैं। आयत की सभी भुजाएँ समान नहीं होती केवल आयत की सम्मुख भुजाएँ समान होती हैं। एक आयत के विकर्ण भी समान लंबाई के होते हैं। नीचे आयत का आरेखी

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

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