2011-09-23 13 views
6

मेरे पास दो वर्ग हैं, ए और बार, दोनों एक हेडर फ़ाइल साझा करते हैं जिसमें अनिवार्य रूप से Foo * foo है। कक्षा ए ऑब्जेक्ट बार * बार को तुरंत चालू करता है। यह ठीक काम करता है। हालांकि, अगर मैं वस्तुउल्लंघन उल्लंघन स्थान 0x00000000 का उपयोग करें। 'नया' कीवर्ड?

Bar* bar = new Bar(); 

की इन्स्टेन्शियशन बनाने मैं जब बार foo के साथ कुछ करने के लिए प्रयास करता है एक पहुँच उल्लंघन मिलता है। यह एक फर्क क्यों पड़ता है?

यदि मैं 'नया' उपयोग नहीं करता तो यह ठीक काम करता है। यह त्रुटि है:

Unhandled exception at 0x003c17ea in Direct3DTutorial7.exe: 0xC0000005: Access violation reading 
location 0x00000000. 

धन्यवाद।

+7

क्या आप हेडर फाइलें शामिल कर सकते हैं? – riwalk

+1

इसे डीबगर में चलाएं, क्रैश के बिंदु को ढूंढने के लिए कॉलस्टैक का उपयोग करें और प्रासंगिक कोड भागों को जोड़ें। –

+1

यह सबसे अधिक संभावना है कि आप एक शून्य सूचक को कम करने की कोशिश कर रहे हैं। – Jesper

उत्तर

13
0xC0000005: Access violation reading location 0x00000000. 

आप एक नल पॉइंटर, Bar के निर्माता में होने की संभावना अपसंदर्भन रहे हैं, या यह निर्माता द्वारा कहा जाता है कुछ अन्य कोड में इसका मतलब यह है। बिल्कुल कहां निर्धारित करने के लिए एक डीबगर का प्रयोग करें।

0

मुझे लगता है कि आप अपनी Foo ऑब्जेक्ट आवंटित नहीं कर रहे हैं। चूंकि यह एक वैश्विक चर है, इसे प्रोग्राम स्टार्ट-अप पर शून्य पर शुरू किया गया है, जो पॉइंटर्स के लिए शून्य मान के अनुरूप है।

0

क्या आपको एक फू ऑब्जेक्ट बनाना और इसे foo सूचक को असाइन करना याद था? ऐसा लगता है जैसे आपके बार कन्स्ट्रक्टर foo के साथ कुछ करने का प्रयास करता है, लेकिन आपने अभी तक Foo ऑब्जेक्ट नहीं बनाया है।

संबंधित मुद्दे