2012-03-04 32 views
7

मैं इस कोड चलाने के बाद इस "heap corruption detected" संदेश:ढेर भ्रष्टाचार का पता चला | सी ++

uli x; 
x = "9876123"; 

क्या "ढेर भ्रष्टाचार का पता चला" का क्या मतलब है:

uli& uli::operator =(char* n) 
{ 
    char* buffer = new char[strlen(n)]; 

    char* p; 
    int op; 
    int coef; 

    strcpy(buffer, n); 

    while(*buffer) 
    { 
     op = strlen(buffer) - 5; 
     p = (op >= 0) ? op+buffer : buffer; 
     coef = atoi(p); 

     if(coef > 65535) 
      coef = atoi(++p); 

     push(head, coef); 
     *p = '\0'; 
    } 

    delete buffer;  // <- heap corruption detected 

    return *this; 
} 

यह मैं कैसे विधि कॉल है?

+2

'हटाएं [] बफर' का उपयोग करें। –

+0

क्या आप स्मृति को संभालने के लिए किसी ऑब्जेक्ट का उपयोग करने के बावजूद हैं। शायद एक char * के बजाय एक std :: स्ट्रिंग। –

+1

मैं यह अच्छा नहीं हूं – Jonas

उत्तर

14

"हीप भ्रष्टाचार" का अर्थ आम तौर पर आपको स्मृति आवंटित करने के लिए उपयोग की जाने वाली डेटा संरचनाओं को हानिकारक स्मृति में लिखा गया है।

वहाँ और अधिक समस्याओं हो सकता है लेकिन पहले एक मैं देख रहा हूँ इस लाइन पर है:

strcpy(buffer, n); 

यह buffer को strlen(n) + 1 बाइट्स लिखेंगे, लेकिन buffer केवल strlen(n) बाइट्स लंबा है (अतिरिक्त बाइट समाप्त है \0।) उस अतिरिक्त बाइट को अपरिभाषित व्यवहार में परिणाम लिखना, और ढेर को भ्रष्ट कर सकता है।

+0

मैं देखता हूं। धन्यवाद। – Jonas

+0

आपका स्वागत है! जब साइट आपको अनुमति देता है तो कृपया उत्तर स्वीकार करें। –

+2

इसके अलावा, एट्स गोरल की टिप्पणी को याद न करें। यदि आप 'नया [] 'के साथ आवंटित करते हैं, तो आपको * हटाएं []' से मुक्त होना चाहिए। –