यहां कोड अंश है।जीसीसी 4.5.1 में इस एसटीएल मानचित्र की प्रविष्टियां क्यों शुरू नहीं की जा रही हैं?
std::map<double, double> temp;
temp[0] = .1;
cout << temp[1] << endl;
// result varies based on compiler
मैं जीसीसी संस्करण 4.4.1 का उपयोग कर संकलन कर रहा हूँ और मैं temp[1]
से 0 मान मिलता है, के रूप में मैं उम्मीद करते हैं। मेरा सहकर्मी जीसीसी संस्करण 4.5.1 पर संकलित कर रहा है। डीबग मोड में (-g
ध्वज के साथ), उसे 1000
मिल जाता है। रिलीज मोड संकलित करते समय (-O2
ध्वज), उसे 0
मिल जाता है।
मेरा विचार यह है कि यह समस्या का प्रकार है जो आम तौर पर अनियमित चर के साथ उत्पन्न होता है, सिवाय इसके कि मानचित्र this question और इसके जैसे कई अन्य लोगों के आधार पर उनके तत्वों पर डिफ़ॉल्ट कन्स्ट्रक्टर को कॉल करना चाहते हैं।
इसके अलावा, सी ++ स्टैंडर्ड लाइब्रेरी Josuttis द्वारा, कहा गया है कि
आप सूचकांक, जिसके लिए कोई तत्व अभी तक मौजूद है, एक नए तत्व स्वचालित रूप से नक्शे में डाला जाता है के रूप में एक महत्वपूर्ण का उपयोग करते हैं। नए तत्व का मान है जो इसके प्रकार के डिफ़ॉल्ट कन्स्ट्रक्टर द्वारा प्रारंभ किया गया है।
डीबग मोड में जीसीसी 4.5.1 में मानचित्र में तत्व क्यों प्रारंभ नहीं किए जा रहे हैं? क्या मैं समझ नहीं पा रहा हूं कि दूसरों ने इस व्यवहार के बारे में क्या कहा है? क्या नए तत्वों का डिफ़ॉल्ट निर्माण कुछ ऐसा है जो मानक का हिस्सा नहीं है? या यह संकलक में एक वास्तविक बग हो सकता है?
आप सही हैं। आपके पास कहीं और स्मृति भ्रष्टाचार है। –
क्या आप एक सरल संकलित प्रोग्राम लिख सकते हैं जो समस्या को दोहराता है। ऐसा करने से आमतौर पर आपकी समस्या हल हो जाएगी यदि नहीं तो हम इसे अपने सिस्टम पर जांच सकते हैं। –