2009-02-18 15 views
6

मैं बस एक ऐसे मुद्दे में भाग गया जहां एचपीयूएक्स पर थ्रेडेड सी ++ प्रोग्राम में स्टैक ओवरफ्लो ने एक एसईजीवी_Mएपीईआरआर का कारण बना दिया जब स्थानीय ऑब्जेक्ट ने एक बहुत ही सरल प्रक्रिया को कॉल करने का प्रयास किया। मैं थोड़ी देर के लिए परेशान था, लेकिन सौभाग्य से मैंने किसी ऐसे व्यक्ति से बात की जिसने इसे एक स्टैक आकार के मुद्दे के रूप में पहचाना और हम थ्रेड के लिए उपलब्ध स्टैक आकार को बढ़ाकर समस्या को ठीक करने में सक्षम थे।सी ++ प्रोग्राम में स्टैक ओवरफ़्लो के लक्षण क्या हैं?

स्टैक ओवरफ़्लो कब पहचान सकता है? क्या विंडोज़/लिनक्स/एचपीक्स पर लक्षण अलग-अलग हैं?

+0

यह मजाकिया है ... स्टैक ओवरफ्लो टैग उचित होगा, सिवाय इसके कि कोई वास्तविक स्टैक ओवरफ़्लो के लिए इसका उपयोग नहीं करता है। –

+0

हाँ, मैं सोच रहा था कि जोकर था जो स्टैक ओवरफ्लो टैग डालता था। :-) –

+1

इस साइट पर वास्तविक स्टैक ओवरफ़्लो जानकारी की खोज करना मुश्किल है ... – Plasmer

उत्तर

2

स्टैक ओवरफ़्लो कब पहचान सकता है?

आप ढेर आकार, जहां ढेर शुरू होता है और दिशा यह स्मृति में बढ़ता है, तो आप बस stack pointer का पता जांच कर सकते हैं और अगर यह ढेर के अंत अतीत को देखने को जानते हैं। सी ++ स्टैक पॉइंटर तक सीधे पहुंच की अनुमति नहीं देता है। आप इस विश्लेषण को करने और इसे आपके प्रोग्राम में जोड़ने के लिए असेंबली में आसानी से एक छोटा सा फ़ंक्शन लिख सकते हैं।

+0

स्टैक पॉइंटर की जांच करना यह बताने में उपयोगी लगता है कि प्रश्न में त्रुटि एक स्टैक ओवरफ़्लो या एक अलग प्रकार की मेमोरी भ्रष्टाचार है या नहीं। धन्यवाद! – Plasmer

10

मान लीजिए कि आप अपने ऐप को रोकने के लिए एक प्लेटफ़ॉर्म पर नहीं हैं और "स्टैक ओवरफ़्लो" कहें तो मुझे संदेह है कि आप वही व्यवहार देखेंगे जो आप किसी भी प्रकार के बफर ओवरफ़्लो से देखेंगे। ढेर आपके कार्यक्रम के लिए स्मृति का एक और पूर्ववर्ती हिस्सा है, और यदि आप उन सीमाओं के बाहर जाते हैं ... अच्छी शुभकामनाएं! कौन जानता है कि आप क्या करेंगे!

आप सीपीयू से तापमान रीडआउट पर लिख सकते हैं, यह वह ईमेल हो सकता है जिसे आप लैरी को टाइप कर रहे हैं, यह थोड़ा कह सकता है कि कर्नेल लॉक हो गया है, जिससे मजेदार डेडलॉक स्थिति हो रही है! कौन जाने।

सी ++ के लिए, कुछ भी नहीं कह रहा है कि स्मृति में अन्य चीजों के संबंध में ढेर कैसे रखा जाना चाहिए या यह चीज़ भी एक ढेर होने की जरूरत है!

0

विंडोज़ पर अपवाद कोड 0xC00000FD

आमतौर पर जब आप महसूस करते हैं कि आपका एसईएच काम करना बंद कर देता है तो निदान करना आसान होता है।

0

शायद थोड़ा सा विषय, लेकिन एडा में असामान्य समस्या (कार्यों में ढेर स्थान से बाहर चलना) एक आम "असामान्य" त्रुटि है। कई कंपाइलर्स PROGRAM_ERROR अपवाद के साथ कार्य (लेकिन मुख्य कार्य नहीं) को रोक देंगे।

एक तरह से, आपको लगभग इसे बाहर निकालने में सक्षम होना चाहिए। यह कुछ ऐसा शुरू करने के साथ शुरू होता है, "मैंने अपने काम के अंदर इस बड़ी सरणी को स्थानांतरित कर दिया, और अचानक यह काम करना छोड़ दिया"।

-1

स्क्रीन पर आउटपुट टेक्स्ट परीक्षण के तहत प्रोग्राम से कोड की रेखाओं के साथ मिश्रित हो गया। पिछले बैश कमांड और अज्ञात मूल के अन्य पाठ भी मौजूद थे। प्रोग्राम पाठ को दूषित होने के लिए जोड़ा गया है।

संबंधित मुद्दे