मैं overloadded है ऑपरेटर नई [] की तरह इससी ++ ओवरलोडेड नया [] क्वेरी: पैरामीटर के रूप में यह कितना आकार लेता है?
void * human::operator new[] (unsigned long int count){
cout << " calling new for array with size = " << count << endl ;
void * temp = malloc(count) ;
return temp ;
}
और अब बुला
human * h = new human[14] ;
कहना sizeof(human) = 16
, लेकिन गिनती यह प्रिंट 232 जो है 14 * 16 + sizeof (int *) = 224 है +8।
यह अतिरिक्त स्थान आवंटित क्यों किया जा रहा है? और यह स्मृति में कहां गिरता है? क्योंकि जब मैं *h
या h[0]
प्रिंट करता हूं तो मुझे एक ही परिणाम मिलते हैं, इसलिए यह स्मृति खंड की शुरुआत में नहीं है। क्या यह बिल्कुल सही है या मुझे कुछ चीज़ याद आ रही है?
अच्छा सवाल। फिर भी मेरे अंदर नाइटपिकर को यह इंगित करने की ज़रूरत है कि आप मॉलोक() को एक नल पॉइंटर लौटने की जांच नहीं करते हैं। – sharptooth
@ शार्पूटोथ: आपका अधिकार, लेकिन यह जानबूझकर coz था, मैं वास्तविक प्रश्न पर ध्यान केंद्रित करना चाहता था और बहुत अधिक ifs नहीं जोड़ना चाहता हूं :) आदर्श रूप से किसी को temp की जांच करने की आवश्यकता है! = 0 और कुछ अपवाद फेंक दें (bad_alloc kinda) –
अतिरिक्त बाइट भंडारण के लिए हैं आवंटित बाइट्स की संख्या। लेकिन जहां यह स्टोर करता है कार्यान्वयन निर्भर है। – bjskishore123