के लिए सी ++ में बिना हस्ताक्षर किए गए पूर्णांक मैंने सी ++ में लूप के लिए रिवर्स के बारे में स्टैक ओवरफ्लो पर कुछ शोध किया है जो हस्ताक्षरित एक के बजाय एक हस्ताक्षरित पूर्णांक का उपयोग करता है। लेकिन मुझे अभी भी समझ में नहीं आता कि कोई समस्या क्यों है (Unsigned int reverse iteration with for loops देखें)। निम्नलिखित कोड सेगमेंटेशन गलती क्यों होगी?लूप
#include <vector>
#include <iostream>
using namespace std;
int main(void)
{
vector<double> x(10);
for (unsigned int i = 9; i >= 0; i--)
{
cout << "i= " << i << endl;
x[i] = 1.0;
}
cout << "x0= " << x[0] << endl;
return 0;
}
मैं समझता हूँ कि समस्या यह है, जब सूचकांक मैं शून्य के बराबर हो जाएगा एक अतिप्रवाह की तरह कुछ है क्योंकि वहाँ। लेकिन मुझे लगता है कि एक हस्ताक्षरित पूर्णांक को शून्य मान लेने की अनुमति है, है ना? अब अगर मैं इसे एक हस्ताक्षरित पूर्णांक से बदलता हूं, तो बिल्कुल कोई समस्या नहीं है।
क्या कोई मुझे उस अप्रत्याशित पूर्णांक के साथ उस रिवर्स लूप के पीछे तंत्र समझा सकता है?
बहुत बहुत धन्यवाद!
'i> = 0' हमेशा हस्ताक्षरित' i' के लिए सच है, इसलिए लूप कभी समाप्त नहीं होता है। – TonyK
कंपाइलर चेतावनियां पढ़ें, वे उपयोगी हैं। इस मामले में, आपके कंपाइलर ने आपको इस तथ्य के बारे में चेतावनी दी होगी कि आपके लूप की स्थिति हमेशा सत्य है। – dragonroot
@dragonroot: दुर्भाग्य से नहीं। मैं g ++ के वाल ध्वज का उपयोग करता हूं। क्या आप एक कंपाइलर ध्वज जानते हैं जो इस तरह की समस्या का पता लगाएगा? धन्यवाद। – Benjamin