इसलिए मुझे वाल्ग्रिंड से कुछ रहस्यमयी अनइंस्टाल्यूटेड वैल्यूज़ मेसेज मिल रहे हैं और यह काफी रहस्य है कि खराब वैल्यू की उत्पत्ति कहां से हुई।
ऐसा लगता है कि वैलेग्रिंड उस जगह को दर्शाता है जहाँ इकाई मूल्य का उपयोग किया जा रहा है, लेकिन असमान मूल्य का मूल नहीं है।
==11366== Conditional jump or move depends on uninitialised value(s)
==11366== at 0x43CAE4F: __printf_fp (in /lib/tls/i686/cmov/libc-2.7.so)
==11366== by 0x43C6563: vfprintf (in /lib/tls/i686/cmov/libc-2.7.so)
==11366== by 0x43EAC03: vsnprintf (in /lib/tls/i686/cmov/libc-2.7.so)
==11366== by 0x42D475B: (within /usr/lib/libstdc++.so.6.0.9)
==11366== by 0x42E2C9B: std::ostreambuf_iterator<char, std::char_traits<char> > std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::_M_insert_float<double>(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, char, double) const (in /usr/lib/libstdc++.so.6.0.9)
==11366== by 0x42E31B4: std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::do_put(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, double) const (in /usr/lib/libstdc++.so.6.0.9)
==11366== by 0x42EE56F: std::ostream& std::ostream::_M_insert<double>(double) (in /usr/lib/libstdc++.so.6.0.9)
==11366== by 0x81109ED: Snake::SnakeBody::syncBodyPos() (ostream:221)
==11366== by 0x810B9F1: Snake::Snake::update() (snake.cpp:257)
==11366== by 0x81113C1: SnakeApp::updateState() (snakeapp.cpp:224)
==11366== by 0x8120351: RoenGL::updateState() (roengl.cpp:1180)
==11366== by 0x81E87D9: Roensachs::update() (rs.cpp:321)
जैसा कि देखा जा सकता है, यह काफी गूढ़ हो जाता है .. खासकर क्योंकि जब यह क्लास :: मेथडएक्स द्वारा कह रहा है, तो यह कभी-कभी सीधे शुतुरमुर्ग आदि को इंगित करता है। शायद यह अनुकूलन के कारण है?
==11366== by 0x81109ED: Snake::SnakeBody::syncBodyPos() (ostream:221)
बस असे ही। क्या मुझे कुछ याद आ रहा है? सुपर-लॉन्ग प्रिंटफ डिटेक्टिव वर्क का सहारा लिए बिना बुरे मूल्यों को पकड़ने का सबसे अच्छा तरीका क्या है?
अपडेट करें:
मुझे पता चला कि क्या गलत था, लेकिन अजीब बात यह है कि, वैलगाइंड ने इसकी रिपोर्ट नहीं की थी जब खराब मूल्य का पहली बार उपयोग किया गया था। इसका उपयोग गुणन फ़ंक्शन में किया गया था:
movespeed = stat.speedfactor * speedfac * currentbendfactor.val;
जहां स्पीडफैक एक इकाईगत फ्लोट था। हालाँकि, उस समय यह सूचित नहीं किया गया था और तब तक नहीं जब तक कि मूल्य मुद्रित नहीं किया जाना है कि मुझे त्रुटि मिलती है .. क्या इस व्यवहार को बदलने के लिए वैलग्राइंड की कोई सेटिंग है?