FIX: F1001 or Protection Violation, Structure Member Array I/OLast reviewed: September 11, 1997Article ID: Q69405 |
5.00 | 5.00
MS-DOS | OS/2
kbtool kbfixlist kbbuglist kberrmsg kbcode
The information in this article applies to:
SYMPTOMSAn attempt to compile an application in the OS/2 operating system fails and the third pass of the compiler generates a protection violation. An attempt to compile the application in the MS-DOS operating system fails and the compiler generates the following messages:
warning F4202: (subroutine name) : formal argument : never used fatal error F1001: Internal Compiler Error (compiler file '@(#)omf_ms.c:1.118', line 1093) Contact Microsoft Technical SupportThe patched version of F1.EXE, which is designed to correct structure element I/O in subroutines, produces the same results as the unpatched version.
CAUSEThe application passes a structure that contains an array to a subroutine. The subroutine specifies the entire structure element array (no subscript) in an I/O statement.
RESOLUTIONUse an implied-DO list to read or write the entire array.
STATUSMicrosoft has confirmed this to be a problem in FORTRAN version 5.0 for MS-DOS and OS/2. This problem was corrected in FORTRAN version 5.1 for MS-DOS and OS/2.
MORE INFORMATIONThe following code example demonstrates this problem.
Sample Code #1C Compile options needed: None
STRUCTURE /T/ INTEGER J(100) END STRUCTURE RECORD /T/ ST CALL SUB(ST) ENDC SUBROUTINE SUB(ST) STRUCTURE /T/ INTEGER J(100) END STRUCTURE RECORD /T/ ST WRITE(*, *) ST.J ! Writes an entire array (no subscript). ENDThe following code example demonstrates one method to work around this problem.
Sample Code #2C Compile options needed: None
STRUCTURE /T/ INTEGER J(100) END STRUCTURE RECORD /T/ ST CALL SUB(ST) END SUBROUTINE SUB(ST) STRUCTURE /T/ INTEGER J(100) END STRUCTURE RECORD /T/ ST WRITE(*,*) (ST.J(I), I = 1, 100) ! Uses an implied DO list. END |
Additional reference words: 5.00 buglist5.00 fixlist5.10
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |