खैर, मैं मानता हूं कि आप जो करने की कोशिश कर रहे हैं, वह संभवतः एक बेहतर तरीका है। लेकिन यह वैसे भी एक दिलचस्प सवाल है। तो चर्चा के लिए ...
सबसे पहले, पोर्टेबल सी या सी ++ करने का कोई तरीका नहीं है। कम से कम asm{ }
ब्लॉक का उपयोग करके आपको असेंबली में जाना होगा।
दूसरा, मैं इसे उत्पादन कोड में उपयोग नहीं करता। लेकिन वीसी ++/x86 के लिए आप यह पता लगा सकते हैं कि कोई चर पर स्टैक द्वारा चेक किया गया है कि यह पता ईएसपी और ईबीपी रजिस्टरों के मानों के बीच है।
आपका ईएसपी (विस्तारित स्टैक पॉइंटर, कम मूल्य) आपके स्टैक के शीर्ष और ईबीपी (विस्तारित बेस पॉइंटर) आमतौर पर नीचे होता है। X86 पर Structure of the Call Stack यहां दिया गया है।
कॉलिंग सम्मेलन मुख्य रूप से फ़ंक्शन पैरामीटर को प्रभावित करेगा, और रिटर्न पता कैसे संभाला जाएगा, आदि। इसलिए यह आपके ढेर से अधिक संबंधित नहीं है। वैसे भी आपके मामले के लिए नहीं।
चीजें जो फेंकती हैं संकलक अनुकूलन हैं। आपका कंपाइलर फ्रेम पॉइंटर (ईबीपी) छोड़ सकता है। वीसी ++ में यह -Oy flag है। तो बेस पॉइंटर के रूप में ईबीपी का उपयोग करने के बजाय आप फ़ंक्शन पैरामीटर के पते का उपयोग कर सकते हैं, यदि आपके पास कोई है। चूंकि उन ढेर पर थोड़ा ऊपर है।
लेकिन क्या होगा यदि आप जिस वैरिएबल का परीक्षण कर रहे हैं वह आपके कॉलर के ढेर पर है? या एक कॉलर की ढेर आपके ऊपर कई पीढ़ियों? खैर आप पूरे कॉल स्टैक पर चल सकते हैं, लेकिन आप देख सकते हैं कि यह कितना बदसूरत हो सकता है (जैसा कि यह पहले से नहीं है :-))
चूंकि आप खतरनाक रूप से रह रहे हैं, एक अन्य कंपाइलर ध्वज जो आपकी रूचि रख सकता है - Gh flag। उस ध्वज के साथ और उपयुक्त _penter हुक फ़ंक्शन के साथ, आप आसानी से फ़ंक्शंस या फ़ाइलों या मॉड्यूल इत्यादि के लिए इन गणनाओं को सेट कर सकते हैं। लेकिन कृपया तब तक ऐसा न करें जब तक कि आप यह देखना न चाहें कि चीजें कैसे काम करती हैं।
इसके बारे में पता ढेर पर क्या और भी बदतर है ....
तरफ से "विधानसभा में ड्रॉप और वहाँ जाँच" मेरे लिए स्पष्ट में कोई जवाब नहीं। इसके अलावा, सवाल यह सुझाव देने के लिए काफी अजीब है कि आप कुछ अनावश्यक रूप से अजीब कर रहे हैं। शायद गलत भी। अच्छी मदद पाने की संभावना बढ़ जाती है यदि आप थोड़ा सा विस्तार करते हैं ... – dmckee
ऐसा करने के लिए कारणों से आपको अपनी समस्या का असली समाधान मिल सकता है ... जब तक आप और अधिक नहीं पूछते हैं तब तक स्टैक ओवरव्लो वास्तव में इसके साथ मदद नहीं करता सामान्य प्रश्न जैसे 'ऐसा करने का एक बेहतर तरीका है'। – Kieveli
आपको स्मार्ट पॉइंटर्स और संदर्भ पास करने की आवश्यकता है। ऐसा लगता है कि आप एक और भाषा से प्रतिमान लाने की कोशिश कर रहे हैं जो सी ++ दुनिया में फिट नहीं है। किसी ऑब्जेक्ट के उपयोगकर्ता को यह ध्यान नहीं दिया जाना चाहिए कि इसे आवंटित किया गया है। यदि आप संदर्भ द्वारा ऑब्जेक्ट पास में हेरफेर करना चाहते हैं। यदि आप स्वामित्व लेना चाहते हैं तो auto_ptr पास करें। यदि आप साझाकरण को साझा नहीं करते हैं तो एक साझा_ptr –