एक अतिरिक्त कदम की आवश्यकता है, तो आपको डीबग आवंटक के साथ डिफ़ॉल्ट नया ऑपरेटर को प्रतिस्थापित करने के लिए कंपाइलर को मनाने के लिए अवश्य ही अवश्य ही अवश्य ही अवश्य ही अवश्य ही अवश्य ही अवश्य ही अवश्य होना चाहिए। केवल डीबग आवंटक "नो-मॉन्स भूमि" क्षेत्र बनाता है जो ढेर ब्लॉक के नीचे या ओवरराइट का पता लगाता है। यह जोखिम भरा है, मूल आवंटक के साथ संकलित कोड कोड के साथ अच्छी तरह से मिश्रण नहीं करेगा जो नहीं था। तो यह आपको स्पष्ट रूप से ऑप्ट-इन करने के लिए मजबूर करता है।
यह पूर्व-संकलित शीर्षलेख फ़ाइल (डिफ़ॉल्ट रूप से stdafx.h) में सबसे अच्छा किया जाता है ताकि आप सुनिश्चित हो सकें कि सभी कोड डीबग आवंटक का उपयोग करता है। इस तरह:
#ifdef _DEBUG
# define _CRTDBG_MAP_ALLOC
# define _CRTDBG_MAP_ALLOC_NEW
# include <crtdbg.h>
# include <assert.h>
#endif
CRTDBG मैक्रो malloc() कार्य करता है और नई ऑपरेटरों की जगह मिलता है।
सावधान रहें कि आपके द्वारा पोस्ट किया गया कोड पहले एक और डायग्नोस्टिक ट्रिगर करेगा। विंडोज विस्टा और ऊपर, विंडोज हीप आवंटक पहले शिकायत करने जा रहा है क्योंकि कोड ने विंडोज हीप अखंडता को नष्ट कर दिया था। केवल, कहने के लिए, 2.
स्रोत
2012-11-01 17:21:23
हम्मम को अनुक्रमणित करके थोड़ा सा उपलक्षक ओवरराइट करें। Stdafx.h और एक आश्रित प्रोजेक्ट में अपनी प्रीकंपेलर सामग्री को जोड़ा गया है, और अभी भी मेरे सरणी ओवरराइट के बाद रोक नहीं रहा है। मैं इस पर अपने सिर खरोंच करूँगा। स्पष्ट रूप से कुछ ऐसा है जो gflags कहा जाता है जो मुझे इसके साथ मदद करने में भी सक्षम हो सकता है। – morgancodes
मैंने आपके कोड का उपयोग करके पोस्ट किए जाने से पहले इसका परीक्षण किया। ठीक काम किया। यदि आप अन्य टूलिंग का उपयोग करते हैं, तो gflags उपयोगी है, जैसे umhd.exe –
धन्यवाद। एक नई, मृत-सरल परियोजना की स्थापना करना ताकि मैं इसे देख सकूं _CrtcheckMemory वास्तव में काम करता है। – morgancodes