2010-10-05 13 views
11

परीक्षण कारणों से मैं अपने सी ++ कोड में शून्य से विभाजन का कारण बनना चाहता हूं। मैंने यह कोड लिखा:शून्य से जानबूझकर विभाजन कैसे करें?

int x = 9; 
cout << "int x=" << x; 
int y = 10/(x-9); 
y += 10; 

मुझे स्क्रीन पर मुद्रित "int = 9" दिखाई देता है, लेकिन एप्लिकेशन क्रैश नहीं होता है। क्या यह कुछ कंपाइलर अनुकूलन के कारण है (मैं जीसीसी के साथ संकलित)? क्या कारण हो सकता है?

+0

आप इसके बजाय 'abort()' का उपयोग क्यों नहीं करते? एक और विकल्प जिसे अनुकूलित नहीं किया जा सकता है वह एक पूर्ण सूचक को लिख रहा है। –

+0

@JanHudec मेरे मामले में मुझे विशेष रूप से शून्य से एक विभाजन की आवश्यकता थी। यह एक एम्बेडेड आरटी कोड था और मैं एक विशिष्ट प्रकार की विफलता के साथ सिस्टम के व्यवहार को पुन: पेश करना चाहता था। कभी-कभी इन मामलों की तरह चीजें जब आप एम्बेडेड सिस्टम में बग की जांच करते हैं। – FireAphis

उत्तर

16

चर volatile बनाओ। अस्थिर चर को पढ़ता है और लिखता है अवलोकन योग्य माना जाता है:

volatile x = 1; 
volatile y = 0; 
volatile z = x/y; 
+1

मुझे यह पसंद आया .... – cateof

+1

भाषा का स्मार्ट उपयोग –

+0

@cateof @ जॉन धन्यवाद। :) – GManNickG

14

क्योंकि y का उपयोग नहीं किया जा रहा है, यह अनुकूलित हो रहा है।
अंत में cout << y जोड़ने का प्रयास करें।

वैकल्पिक रूप से, आप अनुकूलन बंद कर सकते हैं:

gcc -O0 file.cpp 
+2

वैकल्पिक रूप से, ऑप्टिमाइज़ेशन बंद करें :) – Lagerbaer

+0

@ लेजर बेशक :) – NullUserException

+0

तो, बस स्पष्ट करने के लिए, मेरी बाइनरी में विभाजन के साथ रेखा मौजूद नहीं है क्योंकि चर का उपयोग नहीं किया जाता है? – FireAphis

-1

आमतौर पर, शून्य द्वारा विभाजन एक अपवाद फेंक देते हैं। अगर यह अनचाहे है, तो यह कार्यक्रम तोड़ देगा, लेकिन यह दुर्घटनाग्रस्त नहीं होगा।

+0

यह एक माइक्रोसॉफ्ट केंद्रित दृश्य है - अधिकांश वातावरण मशीन अपवादों का अनुवाद नहीं करते हैं जैसे कि शून्य से सी ++ अपवादों में विभाजित करें –

+1

न ही वीसी ++ करता है, शून्य पर विंडोज़ पर आईआईआरसी डिफ़ॉल्ट रूप से एक एसईएच अपवाद है। –

+0

यह प्रोग्राम तोड़ दिया और मुझे संकलित करते समय मुझे एक अनचाहे अपवाद दिया। –

2

शून्य द्वारा डिवीजन एक अपरिभाषित व्यवहार है। क्रैश नहीं करना अपरिभाषित व्यवहार के डोमेन में संभावित संभावित संभावित संभावित संभावित संभावित संख्या का एक उचित सबसेट भी है।