अब इससे पहले कि लोग इस डुप्लिकेट को चिह्नित करना शुरू करें, मैंने सभी निम्नलिखित को पढ़ा है, जिनमें से कोई भी उत्तर नहीं है जो मैं देख रहा हूं:
- सी अकसर किये गए सवाल: मॉलॉक के रिटर्न वैल्यू को लेकर क्या गलत है?
- SO: क्या मुझे स्पष्ट रूप से मॉलोक () रिटर्न वैल्यू कास्ट करना चाहिए?
- SO: C में अनावश्यक सूचक
- SO: क्या मैं मॉलॉक का परिणाम डाल सकता हूं?
दोनों C FAQ और उपरोक्त प्रश्नों के कई उत्तर एक रहस्यमय त्रुटि का हवाला देते हैं, जो कि mallocरिटर्न वैल्यू को छिपा सकती है; हालांकि, उनमें से कोई भी अभ्यास में इस तरह की त्रुटि का एक विशिष्ट उदाहरण नहीं देता है। अब ध्यान दें कि मैंने कहा त्रुटि , चेतावनी नहीं ।
अब निम्नलिखित कोड दिया गया है:
#include <string.h>
#include <stdio.h>
// #include <stdlib.h>
int main(int argc, char** argv) {
char * p = /*(char*)*/malloc(10);
strcpy(p, "hello");
printf("%s\n", p);
return 0;
}
उपरोक्त कोड को gcc 4.2 के साथ, कलाकारों के साथ और बिना संकलित करने से एक ही चेतावनी मिलती है, और प्रोग्राम ठीक से निष्पादित होता है और दोनों मामलों में समान परिणाम प्रदान करता है।
anon@anon:~/$ gcc -Wextra nostdlib_malloc.c -o nostdlib_malloc
nostdlib_malloc.c: In function ‘main’:
nostdlib_malloc.c:7: warning: incompatible implicit declaration of built-in function ‘malloc’
anon@anon:~/$ ./nostdlib_malloc
hello
तो क्या कोई संकलन या रनटाइम त्रुटि का एक विशिष्ट कोड उदाहरण दे सकता है जो कास्टिंग mallocरिटर्न के मूल्य के कारण हो सकता है , या यह सिर्फ एक शहरी किंवदंती है?
संपादित करें मैं दो अच्छी तरह से लिखा इस मुद्दे के बारे में बहस का सामना करना पड़ा:
- कास्टिंग के पक्ष में: सीईआरटी सलाहकार: तुरंत आवंटित प्रकार के लिए एक मेमोरी आवंटन फ़ंक्शन कॉल का परिणाम एक संकेतक में डाल दिया
- कास्टिंग के खिलाफ (2012-02-14 के अनुसार 404 त्रुटि: 2010-01-27 से इंटरनेट आर्काइव वेकबैक मशीन कॉपी का उपयोग करें । {2016-03-18: "robots.txt के कारण पृष्ठ क्रॉल या प्रदर्शित नहीं किया जा सकता है।"}।
voidपॉइंटर्स कोड को C ++ के रूप में संकलित करने की अनुमति देता है; कुछ लोग कहते हैं कि यह एक विशेषता है, मैं कहूंगा कि यह एक बग है;)