बहुत ही सरल सवाल है, मैं निम्नलिखित कार्यक्रम बनाया:शून्य आकार malloc
#include <stdlib.h>
int main(int argc, char ** argv)
{
void * ptr;
ptr = malloc(0);
free(ptr);
}
और यह मेरे मशीन पर SEGFAULT नहीं है। क्या यह stdlib malloc का एक पोर्टेबल व्यवहार है और मुफ्त है, या क्या मैं परेशानी की तलाश में हूं?
संपादित करें: गैर पोर्टेबल लगता है कि मॉलोक द्वारा लौटाया गया मूल्य क्या है। प्रश्न malloc (0) + मुक्त संयोजन के बारे में है, पीटीआर के मूल्य नहीं।
भालू है कि, अगर यह काम नहीं किया, वहाँ रहना होगा सुझाव है कि विशेष मामले का एक बहुत कोड। लोग हर समय एक चर या अभिव्यक्ति के आधार पर कई बाइट्स को मॉलोक करेंगे, और हर बार शून्य की जांच करना अजीब होगा। –
संबंधित: http://stackoverflow.com/questions/2022335/whats-the-point-in-malloc0 – jldupont
मुझे पता है: इस बंद प्रश्न पर सुपर देर से टिप्पणी। लेकिन 'malloc (0) 'के लिए _sever_ का उपयोग किया गया है जिसका उल्लेख नहीं है। उन कार्यान्वयनों पर जहां यह एक गैर-कुल मूल्य देता है, खासकर डेब्यूग बिल्ड में, यह आपके द्वारा पूछे जाने वाले अधिक से अधिक आवंटित करता है, और आपको अपने आंतरिक शीर्षलेख को ठीक करने के लिए सूचक देता है। यदि आपको आवंटन की श्रृंखला से पहले और बाद में यह मिलता है तो यह आपको वास्तविक स्मृति उपयोग के लिए _feel_ प्राप्त करने की अनुमति देता है। –