में प्रारंभ किया गया है, मैंने एक एपीआई लिखा है जिसके लिए संदर्भ को प्रारंभ करने की आवश्यकता है और उसके बाद प्रत्येक एपीआई कॉल में प्रवेश किया गया है। कॉलर संदर्भ के लिए स्मृति आवंटित करता है, और उसके बाद इसे अन्य पैरामीटर के साथ init फ़ंक्शन में भेजता है जो बताता है कि वे बाद में एपीआई कॉल कैसे व्यवहार करना चाहते हैं। संदर्भ अपारदर्शी है, इसलिए क्लाइंट वास्तव में वहां के आसपास नहीं मिल सकता है; यह केवल एपीआई कार्यों के आंतरिक उपयोग के लिए है।यह सत्यापित करना कि स्मृति को
जिस समस्या में मैं चल रहा हूं वह यह है कि कॉलर संदर्भ आवंटित कर रहे हैं, लेकिन इसे प्रारंभ नहीं कर रहे हैं। नतीजतन, बाद के एपीआई फ़ंक्शन अर्थहीन कचरे का जिक्र कर रहे हैं जैसे कि यह वास्तविक संदर्भ था।
मैं यह सत्यापित करने का एक तरीका ढूंढ रहा हूं कि एक एपीआई फ़ंक्शन में पारित संदर्भ वास्तव में प्रारंभ किया गया है। मुझे यकीन नहीं है कि यह संभव है। मैंने दो विचारों के बारे में सोचा है:
- पूर्व परिभाषित स्थिरता का उपयोग करें और इसे संदर्भ के "जादू" फ़ील्ड में एपीआई आमंत्रण समय पर सत्यापित करने के लिए संग्रहीत करें।
- संदर्भ की सामग्री का एक चेकसम का प्रयोग करें, इसे "जादू" फ़ील्ड में संग्रहीत करें और इसे आमंत्रण समय पर सत्यापित करें।
दुर्भाग्य से मैं जानता हूँ कि इन विकल्पों में से किसी एक के लिए एक झूठी सकारात्मक सत्यापन में परिणाम सकता है, क्योंकि या तो स्मृति में यादृच्छिक बकवास "जादू" नंबर से मेल खाता है, या एक पहले से प्रारंभ क्योंकि संदर्भ के रूप में एक ही स्थान पर कब्जा करने के लिए होता संदर्भ। मुझे लगता है कि बाद का परिदृश्य अधिक संभावना है।
क्या यह आसानी से संभावना के सवाल पर उबालता है? कि मैं ज्यादातर मामलों में झूठी सकारात्मक से बच सकता हूं, लेकिन सभी नहीं? क्या यह एक प्रणाली का उपयोग करने लायक है जो मुझे केवल सटीकता की उचित संभावना देता है, या क्या यह अन्य समस्याओं को और अधिक कठिन बना देगा?
यह डीबग बिल्ड के लिए केवल सत्य है - आप रिलीज कोड के लिए इस पर भरोसा नहीं कर सकते –