visual c++ - Crash with new/delete, but not with malloc/free in C++ code -


मेरा विकास वातावरण [विंडोज 7; दृश्य स्टूडियो 2010; X86]।

मेरे पास एक DLL है जो सर्वर 2003 के लिए बनाया गया था लंबे समय पहले। जब मैं इसे अपने प्रोजेक्ट में उपयोग करता हूं और एक क्लास का उपयोग करने के लिए नए / हटाए अनुक्रम का अनुसरण करता हूं, तो हटाए जाने के दौरान एप्लिकेशन क्रैश हो जाता है। मैं नए और हटाने के बीच किसी भी अन्य कॉल के बिना भी एक ही सत्यापित किया। जब मैं नया बदलता हूं / मॉलोक / फ्री से हटाता हूं, तो कोई दुर्घटना नहीं होती है अगर मैं बिना किसी नए वर्ग के उदाहरण की घोषणा करता हूं, कोई गुंजाइश नहीं होता है, जब गुंजाइश निकलती है।

कोई भी गलत क्या हो सकता है? यह हमारी कंपनी की आंतरिक लाइब्रेरी है, इसलिए मैं इसे और अन्य ऐसी सामग्री का नाम नहीं दे पाएगा।

अतिरिक्त जानकारी: इस पुस्तकालय को पहली जगह का उपयोग करने के लिए, मुझे वीएस फीचर को बंद करें "बिल्ट-इन प्रकार के रूप में वाइट_टी का इलाज करें"।

कोड सरल है

  {क्लोगर * myLog = new Clogger (); मेरी लॉग हटाना; // दुर्घटना यहाँ होती है} {// यहां कोई दुर्घटना नहीं है क्लागर मायलॉग; } {क्लोगर * मायलॉग = (क्लोगर *) मॉलोक (आकारफ (क्लॉगर)); नि: शुल्क (मेरीलॉग); // यह दुर्घटना नहीं है }  

यह स्वामित्व पुस्तकालय है, मैं कन्स्ट्रक्टर और डिस्ट्रक्टर पोस्ट नहीं कर सकता।

डिलीट मेमोरी फ्री करने से ज्यादा ही करता है: यह पहले डिस्ट्रक्टर को भी कॉल करता है इसका अर्थ यह है कि उस वर्ग के नाशक में कुछ बुरा होना चाहिए।

यदि एक नाशक में कोई अपवाद अपवाद होता है तो पूरी प्रक्रिया निकलती है (*)। जैसा कि नीचे टिप्पणी की गई (अच्छी प्रतिक्रिया के लिए धन्यवाद) यह अधिक सरल है यहां अधिक विवरण के लिए एक अच्छा लिंक है:

मैं आपको

  प्रयास { } पकड़ (std :: exception & amp; e) {} कैच (...) {}  

नाशक के अंदर और लॉग आउट क्या हो रहा है, या इसे बेहतर डिबगर के माध्यम से जाना जिस जगह पर अपवाद फेंका जाता है उसे रोकने के विकल्प के साथ।

फिर अलग-अलग पहचानने में यह आसान होना चाहिए। मेरे से सिर्फ एक अनुमान है, यह कुछ रजिस्ट्री पहुंच या फ़ाइल पहुंच अधिकार हो सकता है, जहां कुछ बदलाव 2003 से विंडोज 7 के लिए पेश किए गए थे।


Comments