2011-09-26 11 views
6

ऐसे कोड है फेंकता है। यह प्रोग्राम विज़ुअल सी ++ 2010 में संकलित है। अपवाद क्यों फेंक दिया गया है?ऑपरेटर nothrow विकल्प के साथ नया अभी भी अपवाद

संपादित करें: MinGW से विंडोज पर

का उपयोग करते हुए जी ++, सब कुछ ठीक काम करता है।

+0

इस कार्यक्रम को संकलित नहीं करना चाहिए। यह एक दयालुता है। आपको '# शामिल ' जोड़ना चाहिए। वैसे भी, आप वीसी ++ का किस संस्करण का उपयोग कर रहे हैं? –

+0

अच्छा, यह करता है। 2010 साल से संस्करण। – scdmb

+0

यह जीसीसी पर भी संकलित करता है। मुझे क्या विश्वास हुआ कि वास्तव में इसे चलाने के लिए एक अच्छा विचार होगा? – pmr

उत्तर

1

मैंने अभी अपना नमूना वीसी -2010 से चलाया। यह नया नहीं है (नाखुश) जो फेंकता है, लेकिन __security_check_cookie

+0

हम्म, जो तब एक कंपाइलर बग प्रतीत होता है। – MSalters

-2

This बताता है कि यह अभी भी क्यों फेंक रहा है और आप इसे कैसे फेंक सकते हैं। ऐसा लगता है कि nothrow बस अनदेखा किया गया है।

यदि आप अभी भी सी रनटाइम लाइब्रेरी के लिए नए के गैर-फेंकने वाले संस्करण को चाहते हैं, तो अपने प्रोग्राम को nothrownew.obj से लिंक करें। हालांकि, जब आप nothrownew.obj से लिंक करते हैं, तो मानक सी ++ लाइब्रेरी में नया कार्य नहीं करेगा।

मुझे इसके बारे में काफी गहराई से लेख मिला लेकिन यह थोड़े दिनांकित (वीसी 6) है लेकिन शायद समस्या अभी भी बनी हुई है। बीटीडब्ल्यू वीसी सभी throw() कार्यों के विनिर्देशों को अनदेखा करता है।

When Operator new(std::nothrow) Throws an Exception Anyway

+0

वह पृष्ठ "सामान्य" ऑपरेटर नया '(' नया एक्स '' नया (std :: nothrow) X' के विपरीत के रूप में बात करता है), जबकि सवाल विशेष रूप से उत्तरार्द्ध के बारे में है। – NPE

+0

जो विशेष रूप से "नियमित" 'नया 'को संदर्भित करता है। स्पष्टीकरण के लिए http://blogs.msdn.com/b/stevejs/archive/2005/11/01/487776.aspx देखें। – MSalters

7

0"0" के रूप में स्वरूपित किया जाना है। यह कुछ बाइट लेने जा रहा है; मैं शर्त लगाऊंगा कि यही कारण है। std::bad_alloc::bad_alloc पर ब्रेकपॉइंट दें और आप निश्चित रूप से जान लेंगे।

+0

या नई चीज के चारों ओर एक कोशिश-पकड़ ब्लॉक डालें और पूरे फ़ंक्शन के चारों ओर एक प्रयास-पकड़ ब्लॉक डालें ताकि यह पता चल सके कि वास्तव में यह 'नया' है जो विफल रहता है या नहीं। –

+1

इससे भी बेहतर, सी ++ अपवाद को फेंकने के विकल्प को चेक करें। –

संबंधित मुद्दे