- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I am a first time user of CVF but have been writing fortran codes on UNIX and Linux envronments for more than a decade. I moved a program that runs smoothly on HP unix to CVF on win2000 platform and got rid of all compilation errors. I built the executable (TEST.exe) with check:all option (this include checking bounds). I have not been able to execute the program successfully so far.
I keep getting the run time error 157:
forrtl: severe(157): Program Exception - access violation
Image PC Routine Line Source
TEST.exe 0040DB0B CVALLEY_RATES 682 elescat.f
TEST.exe 0040B5CE SCAGAAS 402 elescat.f
TEST.exe 00440BB8 ELMAIN_PARAB 544 mcalnir.f
TEST.exe 004AA2F9 Unknown Unknown Unknown
TEST.exe 0049C6E4 Unknown Unknown Unknown
KERNEL32.dll 77E8D326 Unknown Unknown Unknown
Immediately after line 682 in subroutine cvalley, there is a call to a subroutine. Line 682 is a simple assignment statement (Iva=1). It does not make to thr subroutine.
I used the help menu and got the following about error 157:
"severe(157): Program Exception - access violation
FOR$IOS_ACCVIO. The program tried to read from or write to a virtual address for which it does not have the appropriate access. Try recompiling with the /check:bounds option set to see if the cause is an out-of-bounds memory reference.
This is an operating system error. See your operating system documentation for more information."
The above message did NOT help. I am using option /check:all already.
When I stop the debugger, I get the following message
Loaded symbols for 'D:code01TESTDebugTEST.exe'
Loaded 'C:WINNTsystem32NTDLL.DLL', no matching symbolic information found.
Loaded 'C:WINNTsystem32KERNEL32.DLL', no matching symbolic information found.
Loaded 'C:WINNTsystem32msvcrt.dll', no matching symbolic information found.
Loaded 'C:WINNTsystem32dbghelp.dll', no matching symbolic information found.
The thread 0x654 has exited with code 0 (0x0).
The program 'D:code01TESTDebugTEST.exe' has exited with code 0 (0x0).
So, I went hunting for the above files and found
all the above *.DLL files are in the 'C:WINNTsystem32' directory.
Can any one help me with the above. I hate to switch back to my slow but reliable unix HP workstations.
Thanks.
I keep getting the run time error 157:
forrtl: severe(157): Program Exception - access violation
Image PC Routine Line Source
TEST.exe 0040DB0B CVALLEY_RATES 682 elescat.f
TEST.exe 0040B5CE SCAGAAS 402 elescat.f
TEST.exe 00440BB8 ELMAIN_PARAB 544 mcalnir.f
TEST.exe 004AA2F9 Unknown Unknown Unknown
TEST.exe 0049C6E4 Unknown Unknown Unknown
KERNEL32.dll 77E8D326 Unknown Unknown Unknown
Immediately after line 682 in subroutine cvalley, there is a call to a subroutine. Line 682 is a simple assignment statement (Iva=1). It does not make to thr subroutine.
I used the help menu and got the following about error 157:
"severe(157): Program Exception - access violation
FOR$IOS_ACCVIO. The program tried to read from or write to a virtual address for which it does not have the appropriate access. Try recompiling with the /check:bounds option set to see if the cause is an out-of-bounds memory reference.
This is an operating system error. See your operating system documentation for more information."
The above message did NOT help. I am using option /check:all already.
When I stop the debugger, I get the following message
Loaded symbols for 'D:code01TESTDebugTEST.exe'
Loaded 'C:WINNTsystem32NTDLL.DLL', no matching symbolic information found.
Loaded 'C:WINNTsystem32KERNEL32.DLL', no matching symbolic information found.
Loaded 'C:WINNTsystem32msvcrt.dll', no matching symbolic information found.
Loaded 'C:WINNTsystem32dbghelp.dll', no matching symbolic information found.
The thread 0x654 has exited with code 0 (0x0).
The program 'D:code01TESTDebugTEST.exe' has exited with code 0 (0x0).
So, I went hunting for the above files and found
all the above *.DLL files are in the 'C:WINNTsystem32' directory.
Can any one help me with the above. I hate to switch back to my slow but reliable unix HP workstations.
Thanks.
Link Copied
4 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Please see this article on access violation The most likely problem is that you have passed a constant as an argument to a routine which tries to modify it. This is not legal in Fortran, but the error is not detected on many platforms.
Steve
Steve
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
After reading the article, I turned to the variable iva (see below) because as the article says the compiler will reserve a read only location for it. By using a different dummy variable, and compiling the program ran successfully. Thanks for that.
However, this raises an other question: How can I pass back the modified information through an argument? Is there a way during compiling to avoid using read only allocation during execution? I know using a common block will pass the modified information automatically.
program main
..
Call sub1(iva,....)
end
sub1(iva,...)
..
iva=1 !(change to ivc=1)
call sub2(iva,....) !(change iva to ivc)
return
end
Thanks
However, this raises an other question: How can I pass back the modified information through an argument? Is there a way during compiling to avoid using read only allocation during execution? I know using a common block will pass the modified information automatically.
program main
..
Call sub1(iva,....)
end
sub1(iva,...)
..
iva=1 !(change to ivc=1)
call sub2(iva,....) !(change iva to ivc)
return
end
Thanks
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Variables are not allocated as read-only, but constants are. What I think you did is something like this:
This tries to change the value of the constant 3! It may be that instead of a literal 3 you have a "named constant" (PARAMETER) which can look like a variable if you don't see the declaration.
If you really did pass a variable, there would be no problem changing its value in the subroutine. Can you come up with a short but complete example that shows the original problem?
Steve
call sub(3) ... subroutine sub(i) i = 1
This tries to change the value of the constant 3! It may be that instead of a literal 3 you have a "named constant" (PARAMETER) which can look like a variable if you don't see the declaration.
If you really did pass a variable, there would be no problem changing its value in the subroutine. Can you come up with a short but complete example that shows the original problem?
Steve
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
You are right. I checked the call statement and I used a number in the argument.
Call sub1(1,..)
sub1(iva,..)
iva=1
Thanks
Call sub1(1,..)
sub1(iva,..)
iva=1
Thanks

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