दिलचस्प पोस्ट
ऑब्जेक्ट्स की एक सरणी हटाएं समाधान MSB3247 – एक ही निर्भर असेंबली के विभिन्न संस्करणों के बीच संघर्ष मिला जावास्क्रिप्ट – myArray.exe के लूप के लिए पूर्व बनाम एंड्रॉइड जेडीके 6 या 7 का समर्थन करता है कैसे सी # में एक एक्सेल फ़ाइल खोलने के लिए? Google मानचित्र एपीआई V3: कैसे एक बिंदु ए से दिशा बी (ब्लू लाइन) की दिशा दिखाती है? वेबजीएल फ्लोटिंग प्वाइंट रेंडर लक्ष्य से पिक्सेल पढ़ें इकाई फ़्रेमवर्क के लिए डेटाबेस को पुन: बनाएँ कैसे? प्रत्येक चरित्र के बाद csvwriter.writerow () कॉमा क्यों डालता है? पायजीमे में कीबोर्ड इनपुट कैसे प्राप्त करें? कृपया इस कार्यक्रम में कैमा ऑपरेटर समझाएं Mongodb एकत्रीकरण फ्रेमवर्क | एकाधिक मूल्यों पर समूह? एंड्रॉइड: .apk प्रोग्राममैटिक रूप से इंस्टॉल करें बैश स्क्रिप्ट में पिंग का उपयोग करके होस्ट की उपलब्धता की जांच करना एनजी-ऐप बनाम डेटा-एनजी-एप, अंतर क्या है?

क्या मुझे जांचना चाहिए कि मॉलोक () सफल था?

क्या प्रत्येक मॉलोक () के बाद एक जांच होनी चाहिए अगर यह सफल हो? क्या यह संभव है कि एक malloc () विफल हो? फिर क्या होता है?

स्कूल में हमें बताया गया था कि हमें जांचना चाहिए, यानी:

arr = (int) malloc(sizeof(int)*x*y); if(arr==NULL){ printf("Error. Allocation was unsuccessful. \n"); return 1; } 

इस बारे में क्या अभ्यास है? क्या मैं इसे इस तरह कर सकता हूं:

 if(!(arr = (int) malloc(sizeof(int)*x*y)) <error> 

Solutions Collecting From Web of "क्या मुझे जांचना चाहिए कि मॉलोक () सफल था?"

malloc() डालने की कोई ज़रूरत नहीं है malloc() हाँ, यह जांचना आवश्यक है कि क्या malloc () सफल था या नहीं मान लें कि malloc() असफल हो गया है और आप पॉइंटर सोच मेमोरी तक पहुंचने का प्रयास कर रहे हैं, जिससे क्रैश हो जाएगी। इसलिए पॉइंटर तक पहुंचने से पहले स्मृति आवंटित करने की विफलता को पकड़ना बेहतर है।

 int *arr = malloc(sizeof(int)); if(arr == NULL) { printf("Memory allocation failed"); return; } 

यह मुख्य रूप से केवल मौजूदा उत्तर में जोड़ता है, लेकिन मैं समझता हूं कि आप कहां से आ रहे हैं, यदि आप बहुत सारी मेमोरी आवंटन करते हैं तो आपका कोड समाप्त हो जाता है, मॉलोक के लिए सभी त्रुटि जांच के साथ बहुत बदसूरत दिखता है।

निजी तौर पर मैं अक्सर इस के आसपास एक छोटे से malloc आवरण का उपयोग कर मिलता है जो कभी भी विफल नहीं होगा। जब तक आपका सॉफ़्टवेयर एक लचीला, सुरक्षा महत्वपूर्ण सिस्टम नहीं है, आप किसी भी तरह से विफल होने वाले malloc के आसपास काम नहीं कर सकते हैं, इसलिए मैं इससे कुछ सुझाव दूंगा:

 static inline void *MallocOrDie(size_t MemSize) { void *AllocMem = malloc(MemSize); /* Some implementations return null on a 0 length alloc, * we may as well allow this as it increases compatibility * with very few side effects */ if(!AllocMem && MemSize) { printf("Could not allocate memory!"); exit(-1); } return AllocMem; } 

जो कम से कम यह सुनिश्चित करेगा कि आप एक त्रुटि संदेश और साफ दुर्घटना प्राप्त करें, और त्रुटि चेकिंग कोड के सभी बल्कों से बचा जाए।

असफल हो सकने वाले कार्यों के लिए और अधिक सामान्य समाधान के लिए मैं यह भी एक साधारण मैक्रोज़ुच को लागू करना चाहता हूं:

 #define PrintDie(...) \ do \ { \ fprintf(stderr, __VA_ARGS__); \ abort(); \ } while(0) 

जो फिर आप के रूप में एक समारोह चलाने के लिए अनुमति देता है:

 if(-1 == foo()) PrintDie("Oh no"); 

जो आपको एक लाइनर देता है, फिर से उचित जांच को सक्षम करते हुए थोक से परहेज करता है।