मैं इस malloc समारोह का अध्ययन कर रहा हूँ और मैं कुछ मदद इस्तेमाल कर सकते हैं:Malloc और शून्य प्वाइंटर
static void *malloc(int size)
{
void *p;
if (size < 0)
error("Malloc error");
if (!malloc_ptr)
malloc_ptr = free_mem_ptr;
malloc_ptr = (malloc_ptr + 3) & ~3; /* Align */
p = (void *)malloc_ptr;
malloc_ptr += size;
if (free_mem_end_ptr && malloc_ptr >= free_mem_end_ptr)
error("Out of memory");
malloc_count++;
return p;
}
मुझे पता है कि किसी भी प्रकार के लिए malloc समारोह आबंटित करता है स्मृति स्थान है, अगर वहाँ पर्याप्त स्मृति, लेकिन लाइनों है मुझे समझ में नहीं आता है:
p = (void *)malloc_ptr;
malloc_ptr += size;
यह किसी भी डेटा प्रकार को कैसे इंगित कर सकता है? मैं बस उस शून्य सूचक या उसके स्थान को समझ नहीं सकता।
नोट: malloc_ptr एक अहस्ताक्षरित लंबे
इस कोड के साथ होता है कर रहे हैं धारणा है कि 'अहस्ताक्षरित long' के लिए सूचक (यानी' malloc_ptr') भी इंगित कर सकते हैं शामिल एक संरेखण बिंदु से, किसी भी अन्य वस्तु के लिए। यह धारणा हमेशा सत्य नहीं होती है (उदाहरण के लिए, कुछ प्रणालियों पर यह 'लंबी डबल' ऑब्जेक्ट्स पर इंगित करने में सक्षम नहीं हो सकता है)। –
कोड मानता है कि किसी भी प्रकार के 4-बाइट संरेखण की तुलना में अधिक कठोर संरेखण आवश्यकता नहीं है। कोड यह नहीं दिखाता कि कैसे 'free_mem_ptr' और' free_mem_end_ptr' प्रारंभ किया गया है। जब कोई और जगह नहीं है तो यह शून्य वापस नहीं आता है। यदि फ़ंक्शन 'त्रुटि() 'रिटर्न, तो सभी नरक टूट जाते हैं। –