- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I have a user-defined type that contains an allocated array of user-defined types. They're defined in this module:
module M_ArgCF use M_kind use m_shared_constant_definitions, only: len_name16 type tArgUDF integer(4) :: Kind integer(4) :: Ndim=0 integer(4),allocatable :: intArray(:) real(real_kind) :: RealScalar real(real_kind), allocatable :: RealArray(:) character(len_name16) :: Description character(len_name16),allocatable :: Element(:) end type tArgUDF type tUDFArguments integer(4) :: NArgs=0 type(tArgUDF), allocatable :: Arguments(:) end type tUDFArguments End Module M_ArgCF
I don't think I can create a working reproduction of the error I'm about to describe, but I'll try. For now, I'll just describe what's happening:
1) Using a TUdfArguments type, I allocate a set number of TArgUDF types.
2) I iterate through each Argument in %Arguments(:), and allocate %RealArray and %Element.
3) I call a function that's defined in a module, passing the UDFArguments variable.
4) Inside that function, the UDFArguments variable contains all of the data I passed. Each node in %Arguments(:) is also correctly filled out, except that the %RealArray and $Element variables are no longer valid arrays and cannot be accessed without a runtime error. Using the call stack, I'm able to see before the call and inside the function, and this bizarre behavior is actually happening.
Any ideas?
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Sounds like the relevant dummy argument of the function is INTENT(OUT).
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I tried it with intent(in), intent(inout) and even by value. It's an argument that's being passed in, so intent(out) isn't appropriate. Anyway, nothing I did affected the problem.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I find that the debugger often gets confused about allocatable components, depending on ifort version, visual studio version, source arrangement, active call stack, phase of the moon, etc. The debugger can still assist you in tracking down a problem, but it should not be your only source of truth. In code checks, such as those provided by /check:all or by your own debugging diagnostics (write statements and the like), are generally reliable.
But a debugger telling fibs is quite a different problem from a runtime error.

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page