मैं एक बड़ी परियोजना पर काम कर रहा हूं जो आम तौर पर ठीक काम करता है, लेकिन इनपुट डेटा आकार कुछ सीमाओं से अधिक होने के बाद गंभीर समस्याएं दिखाता है।एक सी प्रोग्राम में (सभी) पूर्णांक ओवरफ्लो कैसे ढूंढें?
इन मुद्दों (संदिग्ध) कर रहे हैं केवल हस्ताक्षर किए पूर्णांक के कारण इस तरह के overflows:
int a, o;
// Initialize a and o
int x = (a+o) >> 1);
जाहिर है, एक का योग और ओ अतिप्रवाह (2^31-1 से भी बड़ा हो जाता है) एक बार, एक्स नहीं है एक और ओ का मतलब लंबा है।
क्या चल रहे कार्यक्रम में इन सभी पूर्णांक ओवरफ़्लो को खोजने का कोई सामान्य तरीका है?
मैं वाल्ग्रिंड या जीडीबी एक्सटेंशन जैसे टूल के बारे में सोच रहा हूं जो प्रत्येक पूर्णांक अंकगणितीय निर्देश पर टूटता है, पैरामीटर लेता है और वास्तविक परिणाम की तुलना में सही परिणाम (बड़े आकार के डेटाटाइप या मनमानी-परिशुद्धता अंकगणितीय के साथ गणना) की तुलना करता है । यदि परिणाम भिन्न होते हैं, तो इसे एक चेतावनी आउटपुट करना चाहिए, एक डीबग ब्रेक या इस तरह कुछ ट्रिगर करना चाहिए।
मुझे पता है, ओवरफ्लो के लिए एक अंकगणितीय निर्देश की जांच कैसे करें (उदाहरण के लिए साइन के लिए साइन जांचना), हालांकि बड़ी मात्रा में कोड के कारण, यह मेरे लिए पूरी परियोजना के माध्यम से जाने और जांच डालने के लिए व्यवहार्य समाधान नहीं है हाथ से हर जगह कोड।
मुझे लगभग पता है कि उपयोगकर्ता इनपुट की सीमा क्या है। कोड के माध्यम से काम करने में समस्या यह है कि इस परियोजना में 200k से अधिक लाइनें हैं (उनमें से 199k मेरे द्वारा लिखी नहीं गई हैं) और मुझे डर है कि ओवरफ्लो-प्रोन कोड के लिए उन्हें हाथ से जांचना बहुत असंभव होगा। – ChrisM
@ChrisM - यदि आप ऐसी स्थिति में हैं जहां आप उस कोड पर भरोसा नहीं कर सकते हैं तो किसी और ने लिखा है सही है तो आपको शायद इसका उपयोग नहीं करना चाहिए। इस तरह की चीजों से निपटने के लिए व्यवसाय प्रथाएं होनी चाहिए (समीक्षा, परीक्षण, आदि)। यदि यह सिर्फ आप इस कोड के साथ है और किसी और के आसपास नहीं है, तो आपको वैसे भी इसे पढ़ने के लिए कुछ समय बिताने की आवश्यकता होगी। – OrangeDog
ठीक है, यह एक दयालु है। मुझे उम्मीद थी कि कोड में समस्याग्रस्त वर्गों को खोजने का कोई तरीका था (शायद एक दर्जन, या कुछ और)। – ChrisM