This could occur from a miscalculation of an array index or the dimension of an array is not defined large enough. Example:
% cat segmentation.f
dimension x(5),y(5)
print *, 'Enter size of arrays'
read *,n
do 10 i = 1,n
x(i) = i**2
y(i) = x(i)/10.0
10 continue
print *, x(n),y(n)
end
% f77 segmentation.f
segmentation.f:
MAIN:
% a.out
Enter size of arrays
40
Segmentation Fault (core dumped)
You can check the array subscripts by using the -C compiler
option. For example,
% f77 -C segmentation.f
segmentation.f:
MAIN:
% a.out
Enter size of arrays
40
Subscript out of range on file segmentation.f, line 5, procedure
MAIN.
Attempt to access the 6-th element of variable x.
Abort (core dumped)
Another cause of an array index being outside the
declared range is when the variable that dynamically
dimensions a subprogram array is TYPEd incorrectly.Example:
% cat segmentation2.f
dimension x(5),y(5)
size = 5
call sub(x,y,size)
end
subroutine sub(x,y,n)
dimension x(n),y(n)
do 10 i = 1,n
x(i) = i**2
y(i) = x(i)/10.0
10 continue
print *, x(n),y(n)
end
% f77 segmentation2.f
segmentation2.f:
MAIN:
sub:
% a.out
*** TERMINATING a.out
*** Received signal 11 (SIGSEGV)
Segmentation Fault (core dumped)
