नहीं, कोड (अनिवार्य रूप से) एक segfault देना नहीं चाहिए। एक segfault तब होता है जब आप किसी वर्चुअल मेमोरी पेज तक पहुंचने का प्रयास करते हैं जो आपकी प्रक्रिया में आवंटित नहीं है।
"हीप" या "फ्री स्टोर" आपकी प्रक्रिया के स्वामित्व वाले वर्चुअल मेमोरी पेजों का एक क्षेत्र है। malloc()
एपीआई इस क्षेत्र को ब्लॉक में विभाजित करता है और ब्लॉक में एक सूचक देता है।
यदि आप उस ब्लॉक के अंत से बाहर हैं जहां आपके पास पॉइंटर है, तो आप आम तौर पर ढेर का हिस्सा हैं, लेकिन आपके आवंटित ब्लॉक का हिस्सा नहीं हैं। इस तरह, आप ढेर को परिभाषित करने के लिए malloc()
उपयोग करने वाले अन्य ढेर ब्लॉक या यहां तक कि डेटा संरचनाओं को भी दूषित कर सकते हैं।
Writing Solid Code: Microsoft's Techniques for Developing Bug-Free C Programs by Steve Maguire alt text http://ecx.images-amazon.com/images/I/5148TK6JCVL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_.jpg
पंडिताऊ के लिए एक परिशिष्ट: दुर्लभ मामलों में
ढेर भ्रष्टाचार पर अधिक जानकारी के लिए, और अपने कोड की डिबग संस्करण में यह पता लगाने के लिए तरीकों के लिए, यह एक महान किताब है , ढेर ब्लॉक के अंत से परे स्मृति तक पहुंचकर, आप उस मेमोरी तक पहुंच सकते हैं जो ढेर का हिस्सा नहीं है। इन मामलों में, आपको अपेक्षित सेगमेंटेशन गलती मिल सकती है। आप ढेर की तुलना में कुछ अन्य डेटा संरचना भी दूषित कर सकते हैं। यह वास्तव में मौका का मामला है। हालांकि, ढेर खुद ही सामान्य ढेर ब्लॉक की तुलना में बहुत बड़ा है, इसलिए आपके उदाहरण जैसे 99% समय कोड ढेर को भ्रष्ट कर देगा। आपके द्वारा प्रदान किया गया उदाहरण उस 99% मामले में आता है।
स्रोत
2009-11-17 19:55:55
शायद भाग्यशाली हो गया। –
आपने एक ऐसे स्थान पर 5 लिखा था जो आपके नहीं था। अगर उस जगह के मालिक को यह पसंद नहीं आया कि आपने अपने घर में क्या किया है, तो इसका बदला लिया जाएगा। ** सावधान रहें **, यह आपके यूएसबी डिस्क ड्राइवर से संबंधित हो सकता है और यह आपके द्वारा डाले गए अगले ड्राइव को प्रारूपित करेगा। – pmg
@pmg: वास्तव में, यह आधुनिक संरक्षित-मोड ऑपरेटिंग सिस्टम पर बहुत अधिक संभावना नहीं है। – bcat