को चालू करता है मैं इस तरह कोड है मैं चल बिन्दु अपवादों के साथ एक मुद्दा में चल रहा हूँ दृश्य स्टूडियो 2005 में चालू की गई:चल बिन्दु ढेर फ्लोटिंग प्वाइंट अपवादों के साथ निपटने
double d = 0.0;
double d2 = 3.0;
double d3 = d2/d;
और अगर मैं रजिस्टर एक एसईएच हैंडलर दिनचर्या, तो मैं आसानी से div-by-zero को C++ अपवाद में बदल सकता हूं और इसे पकड़ सकता हूं। अब तक सब ठीक है।
हालांकि, जब मैं ऐसा करता हूं, तो पहला ऑपरेंड (ऊपर उदाहरण में 0.0) एफपीयू रजिस्टर स्टैक पर छोड़ा जाता है। अगर मैं इसे आठ बार करता हूं, तो मैं तब से प्रत्येक फ़्लोटिंग पॉइंट ऑपरेशन के साथ एक फ्लोटिंग पॉइंट स्टैक चेक अपवाद प्राप्त करना शुरू कर दूंगा।
मैं एफएसटीपी निष्पादित करने के लिए __asm ब्लॉक का उपयोग करके इसका सामना कर सकता हूं, इस प्रकार स्टैक से भटकने वाले मूल्य को पॉप कर रहा हूं, और सबकुछ ठीक है।
हालांकि, यह मुझे चिंतित करता है, क्योंकि मैंने इसे कहीं भी पर चर्चा नहीं की है। मैं उन मूल्यों की संख्या के बारे में कैसे निश्चित हो सकता हूं जिन्हें मुझे पॉप करना चाहिए? क्या अपवाद के समय स्टैक पर बस सबकुछ पॉप करना सुरक्षित है? क्या इस क्षेत्र में कोई अनुशंसित सर्वोत्तम अभ्यास है?
धन्यवाद!
क्या यह एसईएच के साथ भी होता है? यदि आप एसईएच हैंडलर पंजीकृत नहीं करते हैं तो क्या वही व्यवहार करता है? –
यह _controlfp() कॉल करने के परिणामस्वरूप होता है जो उन अपवादों को अनमास्क करता है जिनमें मुझे रूचि है (जैसे div-by-zero)। मुझे नहीं लगता कि मेरे पास एसईएच हैंडलर पंजीकृत है या नहीं - लेकिन अगर मैं नहीं करता, तो मैं सिर्फ एक अनचाहे अपवाद के साथ दुर्घटनाग्रस्त हूं। –