मैं for
लूप में एक रहस्यमय इटरेटर समस्या को ट्रैक करने का प्रयास कर रहा हूं। मुझे इटरेटर के operator!=
में एक त्रुटि मिलती है जिसका आम तौर पर मतलब है कि तुलना करने वाले इटरेटर्स एक ही कंटेनर से संबंधित नहीं हैं। पुस्तकालय के माइक्रोसॉफ्ट के कार्यान्वयन में ट्रेसिंग, operator!=
कॉल operator==
जहां इस परीक्षण सत्य है:घटनाओं का असंभव अनुक्रम
मैंने लिखा और अधिक जानकारी प्राप्त करने की कोशिश में इस छोटे से समारोह for
पाश में मेरी !=
को बदलने के लिए:
template<typename iter>
bool bang_equal(const iter & left, const iter & right)
{
static int count = 0;
auto p1 = left._Getcont();
auto p2 = right._Getcont();
ATLTRACE("Iterator comparison left _Getcont()=%p right _Getcont()=%p %d\n", p1, p2, ++count);
MemoryBarrier();
bool b = left != right;
MemoryBarrier();
auto p3 = left._Getcont();
auto p4 = right._Getcont();
ATLTRACE(" left _Getcont()=%p right _Getcont()=%p %d\n", p3, p4, ++count);
return b;
}
यहां वह दिलचस्प है जहां यह दिलचस्प हो जाता है। मुझे अभी भी left != right
अभिव्यक्ति में त्रुटि मिलती है और डीबगर वहां रुक जाता है, लेकिन पहले ATLTRACE
को छोड़ दिया गया है या दूसरा समय से पहले चला गया है! डीबगर आउटपुट में दोनों लाइनें हैं, और count
का मान डीबगर द्वारा दिखाए गए अनुसार आउटपुट की अंतिम पंक्ति से मेल खाता है।
Iterator comparison left _Getcont()=07D0B2C8 right _Getcont()=07D0B2C8 2984
left _Getcont()=07D0B2C8 right _Getcont()=07D0B2C8 2985
Myprog.exe has triggered a breakpoint.
डिस्सेप्लिब्स विंडो को देखते हुए अपेक्षित क्रम में निर्देश दिखाते हैं। मैं उलझन में हूं। क्या हो रहा है?
वह कोड दिखाएं जहां आप उपयोग कर रहे हैं! =। अजीब त्रुटियों में 99.9% या अधिक उपयोगकर्ता त्रुटियां हैं, कार्यान्वयन त्रुटियों नहीं। –
मार्क, मुझे पता है कि हमें आपके साथ मूल बातें शुरू करने की आवश्यकता नहीं है, लेकिन मुझे हास्य है। मुझे आपके कोड में कोई स्पष्ट ब्रेकपॉइंट दिखाई नहीं देता है, इसलिए मुझे लगता है कि यह एक ब्रेकपॉइंट है जिसे आपने डीबगर के साथ जोड़ा था। क्या आपने "सभी को पुनर्निर्माण" करने का प्रयास किया है? और क्या आप इसे डीबग या रिलीज बिल्ड पर कर रहे हैं? –
मुझे बल में एक अशांति का पता लगाना है, जैसे कि एक सरणी से घिरा हुआ डेटा के समूह की चिल्लाती है और फिर अचानक चुप हो जाती है। मेरा अनुमान है कि आपके पास इस कोड के कारण आपके कोड में स्मृति भ्रष्टाचार बग है :) –