एक स्टैक ओवरफ़्लो को संभालना सही समाधान नहीं है, इसके बजाय, आपको यह सुनिश्चित करना होगा कि आपका प्रोग्राम ढेर से अधिक नहीं हो।
स्टैक पर बड़े चर आवंटित न करें (जहां "बड़ा" प्रोग्राम पर निर्भर करता है)। सुनिश्चित करें कि किसी भी रिकर्सिव एल्गोरिदम ज्ञात अधिकतम गहराई के बाद समाप्त हो जाता है। यदि एक रिकर्सिव एल्गोरिदम किसी अज्ञात संख्या या बड़ी संख्या में रिकर्स कर सकता है, तो या तो अपने आप को पुनरावृत्ति का प्रबंधन करें (अपने गतिशील आवंटित स्टैक को बनाए रखने के द्वारा) या रिकर्सिव एल्गोरिदम को समकक्ष पुनरावृत्त एल्गोरिदम
एक प्रोग्राम जो आवश्यक है "वास्तव में मजबूत" तीसरे पक्ष या बाहरी पुस्तकालयों का उपयोग नहीं करेगा जो "बहुत ढेर खाते हैं।"
ध्यान दें कि कुछ प्लेटफॉर्म एक कार्यक्रम में सूचित करते हैं एक ढेर अतिप्रवाह होता है और कार्यक्रम त्रुटि को संभालने के लिए अनुमति देते हैं। विंडोज़ पर, उदाहरण के लिए, एक अपवाद फेंक दिया जाता है। यह अपवाद एक सी ++ अपवाद नहीं है, हालांकि, यह एक असीमित अपवाद है। जबकि एक सी ++ अपवाद केवल throw
कथन द्वारा फेंक दिया जा सकता है, किसी प्रोग्राम के निष्पादन के दौरान किसी भी समय एक एसिंक्रोनस अपवाद फेंक दिया जा सकता है। हालांकि, इसकी अपेक्षा की जाती है, क्योंकि किसी भी समय एक स्टैक ओवरफ़्लो हो सकता है: किसी फ़ंक्शन कॉल या स्टैक आवंटन स्टैक को ओवरफ़्लो कर सकता है।
समस्या यह है कि एक स्टैक ओवरफ़्लो किसी भी अपवाद को फेंकने की उम्मीद नहीं होने वाले कोड से भी एसिंक्रोनस अपवाद को फेंक सकता है (उदा।, noexcept
या throw()
को C++ में चिह्नित फ़ंक्शंस से)। इसलिए, अगर आप इस अपवाद को किसी भी तरह से संभालते हैं, तो आपके पास यह जानने का कोई तरीका नहीं है कि आपका प्रोग्राम एक सुरक्षित स्थिति में है। इसलिए, एसिंक्रोनस अपवाद को संभालने का सबसे अच्छा तरीका यह है कि इसे (*) पर संभालना न पड़े। अगर किसी को फेंक दिया जाता है, तो इसका मतलब है कि कार्यक्रम में एक बग है।
अन्य प्लेटफार्मों "हैंडलिंग" एक ढेर अतिप्रवाह त्रुटि के लिए इसी तरह के तरीकों है, लेकिन किसी भी तरह के तरीकों में एक ही समस्या से ग्रस्त होने की संभावना है: कोड है कि एक त्रुटि का कारण हो सकता एक त्रुटि पैदा करने के लिए नहीं की उम्मीद है।
(*) कुछ बहुत दुर्लभ अपवाद हैं।
स्रोत
2012-08-27 17:20:47
http://support.microsoft.com/kb/315937 –
मानक भी ढेर उल्लेख नहीं है, आप जो मंच आप लक्षित कर रहे निर्दिष्ट करना चाहिए; कई प्लेटफार्म स्टैक ओवरफ्लो को रोकने या यहां तक कि "स्टैक ओवरफ्लो अलर्ट" प्राप्त करने के साधन प्रदान करते हैं, जब स्टैक लगभग समाप्त हो जाता है। –
व्यक्तिगत रूप से, मुझे लगता है कि एसओ कुछ बचने के लिए नहीं है, बल्कि गले लगाने के लिए है। बस महान समुदाय को देखो! –