विंडोज में निष्पादित होने पर नीचे दिया गया कोड एक पता देता है, हालांकि मैं इसे वापस लौटने की उम्मीद कर रहा था।मैलोक (0) विंडोज में एक गैर-शून्य पता क्यों देता है?
int main()
{
char *ptr = NULL;
ptr = malloc(0);
printf("malloc returned = %u\n", ptr);
}
मॉलोक के ऐसे कार्यान्वयन को क्या संकेत दे सकता था? क्या इसके पीछे कोई कारण है?
चूंकि, यह 0 बाइट मेमोरी है, मैंने किसी भी डेटा को लिखने का प्रयोग नहीं किया है। लेकिन, क्या इस स्मृति का उपयोग किसी भी चीज़ के लिए किया जा सकता है?
+1 जैसा कि मैंने वास्तव में देखा है 1 व्यक्ति इसे अपने "लाभ" के लिए उपयोग करते हैं, जब वह एक लूप में विशेष मामला नहीं लेना चाहता था जो malloc'd/realloc'd स्मृति को बहुत बड़ा कर सकता है। – JimR
आप एक शून्य सूचक को 'realloc' में पास कर सकते हैं, हालांकि, यह चाल किसी भी तरह से आवश्यक नहीं है। आप बस 'शून्य * पी = 0; 'भी कर सकते हैं। –
@Steve यह वास्तव में एक चाल नहीं है। यह प्रोग्रामिंग और ढीले मंच विनिर्देशों का एक आर्टिफैक्ट है। परीक्षण के बिना, यह स्पष्ट नहीं है कि कैसे HeapRealloc (ढेर, HEAP_REALLOC_IN_PLACE_ONLY, 0, 4) व्यवहार करेगा, उदाहरण के लिए। – ActiveTrayPrntrTagDataStrDrvr