Fortran90 issue: nonzero out of bounds array elements

Click For Summary
SUMMARY

The discussion centers on an issue encountered in Fortran90 regarding accessing out-of-bounds array elements. Specifically, the user defined arrays A, B, and C with strict bounds, yet observed unexpected behavior when plotting the value of C(-3,1), which is outside the defined range. Both the ifort and gfortran compilers were used, and the user noted that accessing undefined memory locations returned values similar to defined ones. The conversation concluded that this behavior is related to memory management and suggested using compiler flags to enforce array bounds checking.

PREREQUISITES
  • Understanding of Fortran90 array definitions and bounds
  • Familiarity with ifort and gfortran compilers
  • Knowledge of memory management concepts in programming
  • Experience with debugging techniques in Fortran
NEXT STEPS
  • Research how to enable array bounds checking in ifort and gfortran compilers
  • Learn about memory management practices in Fortran90
  • Explore the implications of accessing uninitialized memory in programming
  • Investigate the use of debugging tools for Fortran code
USEFUL FOR

This discussion is beneficial for Fortran developers, particularly those working with numerical computations, as well as programmers interested in memory management and debugging techniques in Fortran90.

ilvreth
Messages
33
Reaction score
0
Hi to all.

I am programing a new code for some calculation and i have detected a strange issue.
I have my all arrays strictly defined for example

real, dimension(-2:2,-3:2) A, B
complex, dimension(-2:2,1:2) C

In my time dependend calculations i expect the matrix element C(-2,1) to have a maximum value during the whole run, to be approximately about 1.5 and if you attempt the plot t vs C(-2,1) then the curve seems like a Gaussian.


While i use the ifort and gfortran compilers, i attempted an "experiment" to write the matrix element C(-3,1) (which is NOT defined anywhere initialy in my program... because i have complex, dimension(-2:2,1:2) C and not complex, dimension(-3:2,1:2) C)

The i i descovered that if i plot t vs C(-3,1) then the curve i get is a similar to t vs C(-2,1) which is completely strange because is not defined anywhere so i expect to have zero value every time.

I repeat, every array in my program has been defined bounds as i shown above.

How does it happen??
 
Technology news on Phys.org
A description of what is happening is nice, but it is better to have a look at your source code. There may be another issue which you have overlooked.

If you wish to post your source code, please use the
Code:
 tags.
 
Ok then, I just attempt another experiment which i resize the matrix C from (-2:2,1:2) to (-3:2,1:2) then run the code and you get zero C(-3,2) element. It is about how the memory works i guess. I think this is not a critical issue.
 
Yes, it is a memory thing...the truth is that you have no business with memory that you have not defined...for all we know, it is part of some other program running in your computer.

You should probably look into compiling flags to keep an eye on arrays at run time...something like arraybounds or checkarrays or something like that...then, when you run your program and attempt to access an index outside the defined range, the program will stop and let you know.
 

Similar threads

  • · Replies 11 ·
Replies
11
Views
3K
  • · Replies 11 ·
Replies
11
Views
12K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 18 ·
Replies
18
Views
7K
  • · Replies 2 ·
Replies
2
Views
6K
Replies
2
Views
2K
Replies
1
Views
3K
  • · Replies 5 ·
Replies
5
Views
4K
  • · Replies 4 ·
Replies
4
Views
17K
  • · Replies 2 ·
Replies
2
Views
9K