2009-12-15 14 views
8

मैं यह जांचना चाहता हूं कि व्युत्पन्न प्रकार के अंदर एक पॉइंटर पहले ही परिभाषित किया गया है या नहीं। मैं तुम्हें मेरी समस्या को दिखाने के लिए निम्नलिखित सरल कोड लिखा है:व्युत्पन्न प्रकार में एसोसिएटेड पॉइंटर्स? gFortran बनाम इंटेल

T F 

जबकि एक ही कोड विंडोज पर संकलित:

program test 
implicit none 

type y 
    real(8), pointer :: x(:) 
end type y 
type(y), pointer :: w(:) 

allocate(w(2)) 
allocate(w(1)%x(2)) 

write(*,*) associated(w(1)%x), associated(w(2)%x) 

end program test 

gFortran 4.4.1 के साथ इस कोड संकलन और Ubuntu पर इसे चलाने परिणाम देता है इंटेल फोरट्रान संकलक 11.0 के साथ विस्टा प्रदान करता है:

T T 

पहला परिणाम (gFortran) मैं वास्तव में क्या उम्मीद कर रहा हूँ। लेकिन तथ्य यह है कि इंटेल कंपाइलर एक अलग परिणाम प्रदान करता है मुझे डर लगता है कि मेरा कोड सही नहीं हो सकता है। क्या मैं इस उदाहरण में पॉइंटर्स के साथ बहुत कुछ गलत कर रहा हूं? कोई विचार या स्पष्टीकरण?

आपकी मदद के लिए अग्रिम धन्यवाद!

उत्तर

11

आप यह देखने के लिए परीक्षण कर रहे हैं कि पॉइंटर पर nullify का स्पष्ट रूप से उपयोग किए बिना कोई सूचक जुड़ा हुआ है या नहीं। common Fortran mistakes टिप्पणी (कोड नमूने के साथ निकाला गया) पर एक महान पेज:

कई लोगों को लगता .not है कि एक सूचक है जो संबद्ध किया गया कभी नहीं की स्थिति। जुड़े। यह गलत है। (...) जब एक पॉइंटर घोषित किया जाता है तो इसकी स्थिति अनिर्धारित होती है, और सुरक्षित रूप से associated आंतरिक से पूछताछ नहीं की जा सकती है।

ऐसा लगता है कि gfortran संकलक स्पष्ट रूप से घोषणा पर संकेत को रद्द कर स्थापित किया जा सकता है - आप शायद संकलक स्वचालित रूप से शून्य करने के लिए घोषित चर की स्थापना की तरह इस के बारे में सोच चाहिए, और उस व्यवहार पर भरोसा नहीं। यदि आप सुनिश्चित करना चाहते हैं, तो आप इसे स्वयं खत्म कर देंगे।

संपादित:

मैं इंटेल संकलक गाइड के माध्यम से पढ़ रहा हूँ, और यह निर्दिष्ट करता है कि यह सुनिश्चित करें कि सूचक सही ढंग से निरस्त माना जाता है बनाने के लिए - आप

type y 
    real(8), pointer :: x(:) => null() 
end type y 
के रूप में अपने व्युत्पन्न प्रकार सेट कर सकते हैं

नोट, हालांकि, ऐसा लगता है कि यह फोरट्रान 95 तक सीमित है, जैसा कि लिंक किए गए आलेख में उल्लिखित है।

+0

बहुत बहुत धन्यवाद !! यह वास्तव में समस्या थी। आपके द्वारा सुझाए गए समाधान इंटेल कंपाइलर और gFortran दोनों के साथ बहुत अच्छी तरह से काम करता है। – remek

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

  • कोई संबंधित समस्या नहीं^_^