/ / फोरट्रान 77 सबराउटिन के साथ अवैध स्मृति पहुंच - सरणी, स्मृति, फोर्टन, fortran90, fortran77

फोरट्रान 77 सबराउटिन के साथ अवैध स्मृति पहुंच - सरणी, स्मृति, फोर्टन, fortran90, fortran77

एक किले के साथ बातचीत करते हुए 77 सबराउटिन परिणाम कोड के साथ "अवैध स्मृति पहुंच" त्रुटि में परिणाम जो मैंने नीचे संक्षेप में दिया है:

subroutine mysub1()
parameter :: kk=22
real, dimension(KK) :: A
call F77SUB(A)
end

subroutine mysub2()
parameter, integer :: kk=22
real, dimension(:,:), allocatable :: A
integer :: jj

jj = 12
allocate(A(kk,jj))

call F77SUB(A(:,1)) ! ERROR: Invalid memory access
end

जहां F77SUB फोर्टन सबराउटिन है, मैं उपयोग करने की कोशिश कर रहा हूं, जो 1 डी सरणी लेता है और इसे लिखता है। उपरोक्त कोड में, mysub1 काम करता है लेकिन mysub2 नहीं करता।

क्या कोई सुझाव दे सकता है कि समस्या क्या है, याएफ 0 9 0 और एफ 77 सबराउटिन के बीच वास्तव में सरणी तर्क कैसे पारित किए जाते हैं, इस बारे में विवरण प्रदान करें? मैंने एफ 77 सबराउटिन को पारित होने वाले स्केलरों के उदाहरण देखे हैं जो स्पष्ट रूप से केवल एक सरणी की शुरुआत होने के लिए स्केलर का मेमोरी पता लेते हैं। किसी भी ज्ञान की सराहना की जाएगी।

उत्तर:

उत्तर № 1 के लिए 1

एक टिप्पणी के लिए बहुत लंबा है, लेकिन काफी जवाब नहीं है ..

आपके द्वारा पोस्ट किया गया कोड पागल है, और कोशिश कर रहा हैएक सारांशित कोड को ठीक करना एक फलहीन कार्य है, इसलिए मैंने इसे लंबे समय तक खर्च नहीं किया। यहां कुछ गंभीर त्रुटियां हैं, कृपया हमें यह बताकर जवाब न दें कि आपके "असली" कोड में त्रुटियां अनुपस्थित हैं।

  1. F77SUB(A(:,1)) एक subroutine बुलावा के लिए वाक्य रचनात्मक रूप से गलत है, call F77SUB(A(:,1)) सही है।
  2. एक सरणी आवंटित जिसे आवंटित करने के लिए घोषित नहीं किया गया है, इसकी अनुशंसा नहीं की जाती है।
  3. प्रक्रिया तर्क देना एक स्पष्ट है intent अनुशंसा की जा रही है।
  4. फोरट्रान 9 0 के बीच आप जो डिचोटोमी आकर्षित करते हैंFORTRAN77 दिनचर्या भ्रामक है। यदि आपका कंपाइलर फोरट्रान 9 0 संकलित कर सकता है (और यह सक्षम होना चाहिए या आपके पास कोई आवंटन नहीं होगा) तो आप अपने कोड को केवल साधारण फोरट्रान के रूप में सोचने से बेहतर हैं।

जवाब के लिए 0 № 2

मुझे समस्या मिली। मैं 1 डी ए को डबल परिशुद्धता और 2 डी ए वास्तविक होने की घोषणा कर रहा था। किसी भी तरह से यह मुझे शिकायत के बिना F77 दिनचर्या दोनों को पास करने देता है।