2012-11-01 7 views
5

मैं समझ रहा हूं कि एक विंडोज़ एप्लिकेशन में ढेर भ्रष्टाचार को ट्रैक करने के लिए _CrtCheckMemory का उपयोग कैसे करें। मुझे false वापस करने के लिए प्रतीत नहीं होता है।_CrtCheckMemory उपयोग उदाहरण

int* test = new int[1]; 
for(int i = 0; i < 100; i++){ 
    test[i] = 1; 
} 
assert(_CrtCheckMemory()); 

उपरोक्त कोड में, _CrtCheckMemory() रिटर्न सच: यहाँ अपने परीक्षण कोड है। मैं डीबग मोड में चल रहा हूँ। _CrtCheckMemory एक समस्या को फ़्लैग करने का एक सरल उदाहरण प्राप्त करने के लिए मुझे और क्या करने की आवश्यकता है?

उत्तर

6

एक अतिरिक्त कदम की आवश्यकता है, तो आपको डीबग आवंटक के साथ डिफ़ॉल्ट नया ऑपरेटर को प्रतिस्थापित करने के लिए कंपाइलर को मनाने के लिए अवश्य ही अवश्य ही अवश्य ही अवश्य ही अवश्य ही अवश्य ही अवश्य ही अवश्य होना चाहिए। केवल डीबग आवंटक "नो-मॉन्स भूमि" क्षेत्र बनाता है जो ढेर ब्लॉक के नीचे या ओवरराइट का पता लगाता है। यह जोखिम भरा है, मूल आवंटक के साथ संकलित कोड कोड के साथ अच्छी तरह से मिश्रण नहीं करेगा जो नहीं था। तो यह आपको स्पष्ट रूप से ऑप्ट-इन करने के लिए मजबूर करता है।

यह पूर्व-संकलित शीर्षलेख फ़ाइल (डिफ़ॉल्ट रूप से stdafx.h) में सबसे अच्छा किया जाता है ताकि आप सुनिश्चित हो सकें कि सभी कोड डीबग आवंटक का उपयोग करता है। इस तरह:

#ifdef _DEBUG 
# define _CRTDBG_MAP_ALLOC 
# define _CRTDBG_MAP_ALLOC_NEW 
# include <crtdbg.h> 
# include <assert.h> 
#endif 

CRTDBG मैक्रो malloc() कार्य करता है और नई ऑपरेटरों की जगह मिलता है।

सावधान रहें कि आपके द्वारा पोस्ट किया गया कोड पहले एक और डायग्नोस्टिक ट्रिगर करेगा। विंडोज विस्टा और ऊपर, विंडोज हीप आवंटक पहले शिकायत करने जा रहा है क्योंकि कोड ने विंडोज हीप अखंडता को नष्ट कर दिया था। केवल, कहने के लिए, 2.

+0

हम्मम को अनुक्रमणित करके थोड़ा सा उपलक्षक ओवरराइट करें। Stdafx.h और एक आश्रित प्रोजेक्ट में अपनी प्रीकंपेलर सामग्री को जोड़ा गया है, और अभी भी मेरे सरणी ओवरराइट के बाद रोक नहीं रहा है। मैं इस पर अपने सिर खरोंच करूँगा। स्पष्ट रूप से कुछ ऐसा है जो gflags कहा जाता है जो मुझे इसके साथ मदद करने में भी सक्षम हो सकता है। – morgancodes

+0

मैंने आपके कोड का उपयोग करके पोस्ट किए जाने से पहले इसका परीक्षण किया। ठीक काम किया। यदि आप अन्य टूलिंग का उपयोग करते हैं, तो gflags उपयोगी है, जैसे umhd.exe –

+0

धन्यवाद। एक नई, मृत-सरल परियोजना की स्थापना करना ताकि मैं इसे देख सकूं _CrtcheckMemory वास्तव में काम करता है। – morgancodes

संबंधित मुद्दे