C++ reinterpret cast is inconsistent -
मैंने एक परीक्षण कार्यक्रम बनाया:
#include & lt; iostream & gt; नेमस्पेस एसटीडी का उपयोग करना; क्लास बग {निजी: चार ए [25]; पूर्णांक में & amp; देखें (int i) {return * reinterpret_cast & lt; int * & gt; (& amp; a [i]);} सार्वजनिक: बग () {} शून्य से अधिलेखित () {देखें (एक [0]) = 2; Cout & lt; & lt; "[0] का मान है:" & lt; & lt; देखें (एक [0]) & lt; & lt; endl; }}; Int main () {बग बी; b.overwrite (); वापसी 0; }
... जहां मैं दृश्य फ़ंक्शन का परीक्षण कर रहा हूं। सब कुछ काम करता है जैसा मैं उम्मीद करता था; शून्य की विधि शो में प्रिंट स्टेटमेंट के रूप में a [0]
पर मूल्य शुरू होता है।
हालांकि, मैं प्रोग्राम को थोड़ा संशोधित करता हूं:
#include & lt; iostream & gt; नेमस्पेस एसटीडी का उपयोग करना; क्लास बग {निजी: int x; चार ए [25]; पूर्णांक में & amp; देखें (int i) {return * reinterpret_cast & lt; int * & gt; (& amp; a [i]);} सार्वजनिक: बग () {} शून्य से अधिलेखित () {देखें (एक [0]) = 2; Cout & lt; & lt; "[0] का मान है:" & lt; & lt; देखें (एक [0]) & lt; & lt; endl; }}; Int main () {बग बी; b.overwrite (); वापसी 0; }
ध्यान दें कि मैंने एक निजी सदस्य चर int x
जोड़ दिया। यह एकमात्र बदलाव था। पल मैं ऐसा करता हूं, ओवरराइट विधि में प्रिंट स्टेटमेंट अब 2 प्रोग्राम प्रिंट नहीं करता है, जैसा कि पिछले प्रोग्राम में है - यह एक कचरा मान देता है (और कभी-कभी सही मान, 2)।
अधिक महत्वपूर्ण बात, कभी-कभी सही मूल्य दिखाएगा, लेकिन कार्यक्रम सेगफ़ॉल्ट होगा।
कोई भी हुड के नीचे क्या हो रहा है?
बोनस प्रश्न 25 से कम मूल्यों के लिए, मेरा निजी चर char एक [मान] कंपाइलर चेतावनियां दिखाएगा जो स्टैक स्मैशिंग का उल्लेख करती है (जी ++ - 4.7 का उपयोग करते हुए)।
Comments
Post a Comment