2011-11-11 7 views
6

Occasionaly, मैंने अपने प्रोग्राम के कोड के एक स्थान पर एक टाइपो बनाया है:क्या मैं वास्तव में राउंड ब्रैकेट के साथ एक सरणी शुरू कर सकता हूं?

int a = 10; 
char* b = new char(a); 

त्रुटि स्पष्ट है: मैंने इसके बजाय लिखा है (]। अजीब बात यह है कि ... कोड संकलित ठीक है, यह ठीक से डीबगर में भाग गया। लेकिन डीबगर के बाहर संकलित .exe इन लाइनों के साथ काम करने के बाद एक पल दुर्घटनाग्रस्त हो गया।

कोड की दूसरी पंक्ति वास्तव में वैध है? और यदि यह है, तो संकलक का क्या अर्थ है?

उत्तर

10

यह a के संख्यात्मक मूल्य के साथ एक एकल char है, इस मामले में 10। पॉइंटर्स न केवल एरे को इंगित करते हैं, पता है।

5

आप एक एकलchar आवंटन और यह a से एक मान निर्दिष्ट कर रहे हैं। यह एक सरणी आवंटित नहीं है।

यह किसी भी अन्य प्रकार के लिए एक new अभिव्यक्ति में निर्माता कॉल करने जैसा ही है:

std::string* s = new std::string("foo"); 
int* i = new int(10); 
std::vector<std::string>* v = new std::vector<std::string>(5, "foo"); 
2

char t(a) एक स्थानीय चार a के मूल्य के प्रारंभ पैदा करता है।
new char (a)a के मान में प्रारंभिक गतिशील आवंटित चार बनाता है।

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