visual c++ - HEAP CORRUPTION DETECTED after upgrade the project from vc6 to vc9 -
फ़ंक्शन जो vc6 में लिखा गया था।
bool CProductionTestDlg :: GetVariables (सीएसटीिंग strFilename , CMapStringToOb * cVariableMap) {int iMaxEntryLen = 1000; // चार आरजीबीएन्ट्रीनाम [1000]; // पिछले चार * rgbEntryNames = (चार *) malloc (iMaxEntryLen * sizeof (int)); // अब CString strEntryName = ""; CString strEntryValue = ""; यूआईएनटी ui सेपरेटर = 0; उलोंग dwRetCode, dwSizeOfReturn; DwSizeOfReturn = GetPrivateProfileString (cszVariables, NULL, "", आरजीबीएन्ट्रीनाम, आईमैक्सएन्ट्रीलेन, स्ट्रफिलनैम); जबकि (ui सेपरेटर और लेफ्टिनेंट; dwSizeOfReturn) {strInntryName.Format ("% s", और आरजीबीएन्टीरीनाम [uiSeperator]); Uiसेपरेटर + = strEntryName.GetLength () + 1; CString * strValue = नया CString (); DwRetCode = GetPrivateProfileString (cszVariables, strêntryName, "", strEntryValue.GetBufferSetLength (strEntryValue.GetLength ()), आईमैक्सएन्ट्रीलेन, स्ट्रफिलैनैम); StrValue- & gt; प्रारूप ("% s", strInntValue); CVariableMap- & gt; सेटट (strEntryName, (CObject *) strValue); } वापस सच; } अब मैं इसे vs08 पर नवीनीकृत करता हूं। यह प्रोजेक्ट सही तरीके से तैयार होता है, लेकिन जब मैं इसे खोलता हूं तो इसे अपवाद फेंक दिया जाता है
* महापराधिकरण का पता चला * सीआरटी ने पता लगाया कि मेप बफर के बाद एप्लिकेशन ने मेमोरी में लिखा। जब मैं अपने आवेदन को डिबग करता हूं, तो नियंत्रण को dbgheap.c पर लौटने के बाद लाइन 2103 पर जाता है ।
समस्या यहाँ है:
dwRetCode = GetPrivateProfileString (cszVariables , स्ट्रेंन्ट्रीनाम, "", स्ट्रेंन्ट्री वैल्यू। गैटबफ़रसेटलाइन (स्ट्रेंन्टिव वैल्यू.गेट लैंघ ()), आईमैक्सएन्ट्रीलेन, स्ट्रफिलैनैम); आप आकार 0 के एक बफर पास ( strêntryValue को "" के लिए आरंभीकृत किया गया है), लेकिन कहें इसका आकार iMaxEntryLen है । इसलिए GetPrivateProfileString सोचता है कि इसके पास बहुत बड़ा बफर है जो वास्तव में मिल गया है, और इसकी सीमा से परे लिखिए। अपग्रेड करने के बाद आपको यह त्रुटि मिलती है, लगता है, सुधार सीमा सत्यापन बग VC6 में भी था, यह अभी पता नहीं चला था।
Comments
Post a Comment