PRB: 486, Subroutine Array Element Crosses Segment
ID: Q77461
|
5.10 | 5.10
MS-DOS | OS/2
kbprg kbprb
----------------------------------------------------------------------
The information in this article applies to:
- Microsoft FORTRAN for MS-DOS, version 5.1
- Microsoft FORTRAN for OS/2, version 5.1
----------------------------------------------------------------------
SYMPTOMS
========
Programs may generate a protection violation under OS/2 or hang the machine
under MS-DOS when that program passes a HUGE array element to a subroutine.
In most cases, the coproccesor must be used for the error to occur.
The element from the HUGE array must be contained after the first 64K
segment of the HUGE array.
CAUSE
=====
The compiler does not check every array access to verify if it crosses a
segment boundary, and was not designed to do so.
RESOLUTION
==========
Try using the HUGE memory model by compiling with /AH to allow arrays to
span segments.
This is not an issue in FORTRAN PowerStation.
MORE INFORMATION
================
The following code reproduces the error:
real x(16385)
x=1.
call y(x(16384))
end
subroutine y(x1)
real*8 x1,z
z = x1 + 1.d0
write(*,*) x1, z
end
Additional reference words: 5.10
KBCategory: kbprg kbprb
KBSubcategory: FORTLngIss
Keywords :
Version :
Platform :
Issue type :
Last Reviewed: July 20, 1995