c++ - Executing member function of class through pointer to abstract parent of said class -


मैंने एक सार बेस क्लास Animal बनाया है, जिसमें सार्वजनिक आभासी सार विधि makeSound ( ) । मैंने एक उपवर्ग बनाया है गाय जो लागू करता है Animal.makeSound () जैसा आप उम्मीद करेंगे (आप जानते हैं ... "moo") और मेरे पास एक फार्म वर्ग है जिसमें एक निजी सदस्य चर std :: vector & lt; Animal * & gt; जानवरों फार्म तरीकों में से एक में मैं सभी जानवरों पर पुनरावृत्त करता हूं और उन्हें अपनी आवाज़ बना देता हूं।

  के लिए (अहस्ताक्षरित int i = 0; i & lt; animals.size दुर्भाग्य से मुझे एक त्रुटि मिलती है  

टेस्ट बीड.एक्सए में 0x65766974 पर असम्बद्ध अपवाद : 0xC0000005: प्रवेश उल्लंघन स्थान 0x65766974।

कोई भी विचार जो यहाँ पर हो रहा है?


अद्यतन: प्रति अनुरोध अधिक कोड जोड़ना

  वर्ग खेत {सार्वजनिक: फार्म (); वर्चुअल ~ फार्म (शून्य); शून्य सेटबर्नऑनफिर (); निजी: वेक्टर & lt; पशु * & gt; जानवरों; }; फार्म :: फार्म () {animals.push_back (नया कुत्ता ()); Animals.push_back (नई बिल्ली ()); जानवरों। पुश_बैक (नई चिकन ()); जानवरों। पुश_बैक (नया हॉर्स ()); जानवरों। पुश_बैक (नया गाय ()); } फार्म: setBarnOnFire () (के लिए (अहस्ताक्षरित int i = 0; i & lt; animals.size (i ++) {जानवरों [i] - & gt; मेकसाउंड ()}}  

क्या ऐसा कुछ है जो मुझे जानवरों को प्रारंभ करने के लिए करना चाहिए था।

रिज़ॉल्यूशन:

तो आप सभी सही थे। मैं स्मृति तक पहुंच रहा था जो मेरे पास नहीं था लेकिन यह मुझे हमेशा नीचे ट्रैक करने के लिए ले गया यह इस बात की गलतफहमी के कारण था कि वस्तु आरंभ कब होता है। असल में, एक सदस्य चर का "आरंभ" करने के प्रयास में मैं वास्तव में एक स्थानीय चर के साथ इसे अधिलेखित कर रहा था मैंने तब सभी जानवरों को स्थानीय दिया जो मैंने बनाया था बाद में, पशु स्थानीय चर को कॉल करने का प्रयास करेंगे - जो अब अस्तित्व में नहीं है।

ठीक है, मुझे टेस्ट बीड। एक्सई में 0x65766974 पर अनचाहे अपवाद: 0xC0000005: प्रवेश उल्लंघन स्थान 0x65766974। "

ऐसा लगता है कि कोड सूचक को 0x65766974 (" अपवाद 0x65766974 पर ") लेकिन यह पढ़ने के लिए कोई मान्य स्थान नहीं है, अकेले कोड दें: (" प्रवेश का उल्लंघन पढ़ने का स्थान 0x65766974 ", ध्यान दें, वही नंबर)

ऐसा संभव है कि वोलेबल, या Vtable सूचक दूषित हो रहा है? संभवतः स्ट्रिंग द्वारा ऑब्जेक्ट ओवरराइट किया जा रहा है? जैसा कि यह एक वेक्टर में संग्रहीत किया जा रहा है, संभवतः आपके पास वेक्टर में पूर्ववर्ती ऑब्जेक्ट में एक बफर (शायद एक चार सरणी?) से अधिक कुछ है, और यह अगले ऑब्जेक्ट्स vtable सूचक को भ्रष्ट कर रहा है?

< / html>

Comments