तो, मुझे कुछ मदद चाहिए। मैं सी ++ में एक परियोजना पर काम कर रहा हूं। हालांकि, मुझे लगता है कि मैंने किसी भी तरह से मेरी ढेर को भ्रष्ट करने में कामयाब रहा है। एक ढेर डंप के साथ अपने सिस्टम परमेमोरी मैनेजमेंट, हीप भ्रष्टाचार, और सी ++
std::string hello = "Hello, world.\n";
/* exampleString = "Hello, world.\n" would work fine. */
exampleString = hello;
दुर्घटनाओं: यह सच है कि मैं एक वर्ग के लिए एक std::string
जोड़ा गया है और यह एक और std::string
से एक मान निर्दिष्ट पर आधारित है। इसलिए मूल रूप से मुझे रोकना होगा और मेरे सभी कोड और मेमोरी प्रबंधन सामग्री के माध्यम से जाना होगा और पता लगाएं कि मैंने कहां खराब कर दिया है। कोडबेस अभी भी छोटा है (लगभग 1000 लाइनें), इसलिए यह आसानी से सक्षम है।
फिर भी, मैं इस तरह के सामान के साथ अपने सिर पर हूं, इसलिए मैंने सोचा कि मैं इसे वहां फेंक दूंगा। मैं एक लिनक्स सिस्टम पर हूं और valgrind
के साथ घिरा हुआ है, और पूरी तरह से नहीं जानता कि मैं क्या कर रहा हूं, यह रिपोर्ट करता है कि std::string
का विनाशक एक अवैध मुक्त था। मुझे Google खोज से 'हीप भ्रष्टाचार' शब्द प्राप्त करने के लिए प्रवेश करना होगा; इस तरह के सामान पर किसी भी सामान्य उद्देश्य लेख की भी सराहना की जाएगी।
(rm -rf ProjectDir
से पहले में, सी # में फिर से कार्य करें: डी)
संपादित करें: मैं यह स्पष्ट नहीं किया है, लेकिन तरीके स्मृति समस्याओं के इन प्रकार के निदान के लिए एक सलाह है कि मैं क्या कर रहा हूँ के लिए पूछ रहे हैं। मुझे पता है कि std :: स्ट्रिंग सामान सही है, इसलिए मैंने ऐसा कुछ किया है (या एक बग, लेकिन चयन के साथ कोई समस्या नहीं है)। मुझे यकीन है कि मैं जिस कोड को लिखा है उसे देख सकता हूं और आप बहुत ही स्मार्ट लोगों को किसी भी समय समस्या नहीं देख पाएंगे, लेकिन मैं इस तरह के कोड विश्लेषण को अपने 'टूलबॉक्स' में जोड़ना चाहता हूं, जैसा कि यह था।
+1, अच्छी सूची! हालांकि, मैं # 8 पर विवाद करूंगा - जबकि यह 'खराब' पहुंच को रोकता है, यह वास्तव में एक कोड गंध है जो मेरे अनुभव में खराब तर्क या खराब वस्तु जीवनकाल प्रबंधन को छुपाता है ... – Roddy
इन दिनों, सी ++ के मानक में अपने स्मार्ट पॉइंटर्स हैं लाइब्रेरी, इसलिए उस के लिए बूस्ट या लोकी की कोई ज़रूरत नहीं है। लिनक्स के लिए –