मेरे पास एक कोड है जहां मैं कुछ डेटाबॉक तक पहुंचने के लिए पॉइंटर का उपयोग करता हूं। कुछ दुर्लभ मामलों में, डेटाबॉक के कुछ सदस्य खाली होते हैं, और नतीजतन पॉइंटर खतरनाक हो जाता है। वास्तव में, मुझे सही सूचक मिलता है लेकिन पॉइंटर के साथ कुछ करने का प्रयास करते समय प्रोग्राम क्रैश हो जाता है।क्या यह जांचने का कोई तरीका है कि पॉइंटर खतरे में है या नहीं?
सामान्य सलाह इस प्रकार के उपयोग से बचने के लिए होगी। लेकिन दुख की बात है कि, मेरे द्वारा उपयोग किए जाने वाले ढांचे के लिए आवश्यक है कि मैं इस प्रकार के डेटा एक्सेस विधियों का उपयोग करूं।
क्या कोई तरीका है यदि मैं इसके साथ कोई ऑपरेशन करने से पहले पॉइंटर अमान्य हो तो "जांच" कर सकता हूं? यह जांचकर कि सूचक न्यूल के बराबर नहीं है, जाहिर है। मैंने यह भी कोशिश की:
try
{
CString csClassName = typeid(*pMyPointer).name(); // Check error condition
// The line below fails due to dangling pointer (data block is not valid).
hr = pMyPointer->MyPointerMethod();
}
catch(bad_typeid)
{
return E_FAIL;
}
catch(...)
{
return E_FAIL;
}
क्या यह सही तरीका है?
मेरा सूचक कक्षा में स्थिर होना चाहिए..यह अभी भी ठीक है अगर मैं स्मार्ट पॉइंटर्स का उपयोग करता हूं? – Nikhil
यह कोई समस्या नहीं है। आपको थ्रेड सुरक्षा समस्याओं के लिए बाहर देखने की आवश्यकता है, लेकिन यह एक कच्चे सूचक के रूप में एक स्मार्ट सूचक के लिए अलग नहीं है। –
मुझे नहीं लगता कि यह महत्वपूर्ण है। केवल एक चीज जो मुझे परेशान करती है वह यह है कि क्या आपका ढांचा स्वयं को बिना किसी पूर्व सूचना के अपने पॉइंटर्स को लटक सकता है। देखें, आपको स्मार्ट पॉइंटर से कच्चे पॉइंटर निकालना होगा और इसे अपने ढांचे में पास करना होगा। यदि यह गारंटी देता है कि कॉलर कॉल के बाद वैध रहेगा, या आपको सूचित किया जाएगा कि यह अमान्य हो जाना चाहिए - ठीक है, इसके लिए जाएं। – Septagram