non-standard / non-POSIX getcwd() not calling malloc -
getcwd man-page से इस उद्धरण का क्या हिस्सा मैं गलतफहमी में हूं?
char * Getcwd (चार * buf, size_t आकार); ... POSIX.1-2001 मानक के लिए एक एक्सटेंशन के रूप में, लिनक्स (libc4, libc5, glibc) getcwd () बफर गतिशील रूप से malloc (3) का उपयोग करके आवंटित करता है अगर buf नल है इस मामले में, आवंटित बफर की लंबाई का आकार जब तक आकार शून्य नहीं होता है, जब buf को आवश्यकतानुसार बड़ा आवंटित किया जाता है कॉलर को मुक्त करना चाहिए (3) लौट बफर क्योंकि
21 char * बफर = नल; 22 size_t बफर साइज = 0; 23 getcwd (बफर, बफर साइज़); 24 प्रिंटफ़ ("% s \ n", बफ़र); लाइन 24 पर एक सेग-फॉल्ट पैदा कर रहा है और जीडीबी का बैकस्ट्रैक मुझे बफर = 0x0 बताता है?
संपादित करें: < पूर्व> getcwd (बफर, बफ़र साइज़); अभी भी जो भी कारणों से काम नहीं करता है, लेकिन
बफर = getcwd (शून्य, 0); करता
आपको याद आती है कि सी केवल मूल्य से कॉल करता है ; संदर्भ से कॉल नहीं: <पूर्व> getcwd (बफर, बफर साइज़); संकेतक बफ़र को बदल सकता है (केवल बफ़र को इंगित करता है, लेकिन जब से यह < कोड> शून्य ...)। यही कारण है कि आपको getcwd का उपयोग करने के लिए मूल्य का उपयोग करने की आवश्यकता है। उस आदमी पृष्ठ का या उस उद्धृत भाग को गलत तरीके से समझाया गया है जहां यह कहता है कॉल करने वाले को निशुल्क (3) वापस लौटा बफर : -)
Comments
Post a Comment