2012-11-08 16 views
5

संभव डुप्लिकेट:
Do I cast the result of malloc?है यह आवश्यक टाइप के कलाकारों malloc और calloc को

मैं के लिए malloc और calloc के प्रकार के कास्टिंग कारण पता लगाने के लिए किया गया था googling। लेकिन, मुझे केवल malloc का प्रकार-कास्टिंग आवश्यक नहीं है क्योंकि यह शून्य सूचक लौटाता है, लेकिन कॉलोक के बारे में क्या है। कॉलोक के लिए भी यही कारण है ???

अब

, अगर हम, वापस पहले बात करने के लिए ले जाने के malloc और calloc की वापसी मूल्य के बारे में। फिर, मैंने पाया कि, दोनों आवंटित रिक्त स्थान लौट रहे हैं। तो, मैं यहाँ थोड़ा उलझन में हूँ। तो, मेरे सवालों का

  1. क्या malloc और calloc

  2. की वापसी मूल्य है इसे टाइप-कास्ट करने के लिए आवश्यक malloc और calloc है कर रहे हैं। और क्यों ?

+0

@hmjd हो सकता है .. लेकिन यहां मैं दोनों 'मॉलोक' और 'कॉलोक' के लिए भी पूछ रहा हूं। – Ravi

+0

हां, यह एक डुप्लिकेट है, लेकिन कंप्यूटर्स को शून्य पॉइंटर को किसी अन्य प्रकार के लिए डालने की आवश्यकता के बारे में और अधिक परेशानी हो रही है - जो शून्य सूचक के मूल उद्देश्य के मुकाबले उड़ती है, जो एक सार्वभौमिक प्रकार था जो हो सकता है कास्ट और कुछ भी सौंपा गया। यह अधिक सी "प्रगति" है। संदर्भ के लिए – user2548100

उत्तर

7

मॉलोक और कॉलोक का वापसी मूल्य क्या है?

यह void (void*) के लिए एक सूचक है।

टाइप-कास्ट मॉलोक और कॉलोक टाइप करना आवश्यक है। और क्यों ?

नहीं, क्योंकि पॉइंटर से void पर ऑब्जेक्ट करने के लिए पॉइंटर से रूपांतरण अंतर्निहित है।

सी 11 (n1570), § 6.3.2.3 प्वाइंटर
void करने के लिए एक सूचक को या किसी ऑब्जेक्ट प्रकार के लिए सूचक से परिवर्तित किया जा सकता है।

यह malloc और calloc दोनों के लिए सही है।

+1

+1 – CCoder

1

malloc() और calloc() की वापसी मूल्य क्या है?

void *malloc(size_t size); 
void *calloc(size_t nmemb, size_t size); 

void* दोनों कार्यों के द्वारा दिया जाता है।

टाइप-कास्ट मॉलोक और कॉलोक टाइप करना आवश्यक है। और क्यों ?

नहीं। टाइपकास्ट की आवश्यकता नहीं है। malloc() और calloc() फ़ंक्शंस आवंटित स्मृति में एक सूचक लौटाते हैं जो किसी भी प्रकार के चर के लिए उपयुक्त रूप से गठबंधन किया जाता है। त्रुटि पर, ये फ़ंक्शन NULL लौटाते हैं। NULL को शून्य के आकार के साथ malloc() पर सफल कॉल द्वारा या calloc() पर nmemb या शून्य के बराबर आकार के साथ एक सफल कॉल द्वारा वापस किया जा सकता है।

2

malloc() या calloc() रिटर्न void * जो किसी भी सूचक प्रकार .इसके सी यह void* टाइपकास्ट करने के बाद से यह परोक्ष ग में compiler.But द्वारा किया जाता है आवश्यक नहीं है को सौंपा जा सकता ++ यह आप त्रुटि दे देंगे अगर आप

टाइपकास्ट नहीं होंगे
1

malloc और calloc का वापसी मूल्य void* है। इन कार्यों द्वारा आवंटित ढेर मेमोरी स्पेस का पता।

दोनों कार्य स्मृति आवंटित करते हैं। उनके बीच एकमात्र अंतर यह है कि

  • malloc बस स्मृति आवंटित करता है।
  • calloc स्मृति आवंटित करता है और 0.

सी में करने के लिए यह initializes अपने इन कार्यों में से वापसी मान कास्ट करने के लिए सिफारिश नहीं की।

सी ++ में डालना अनिवार्य है।

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