forrtl:严重(157):程序异常 - 访问冲突

Posted

技术标签:

【中文标题】forrtl:严重(157):程序异常 - 访问冲突【英文标题】:forrtl: severe (157): Program Exception - access violation 【发布时间】:2012-11-15 03:46:16 【问题描述】:

我正在使用 BLUPF90 系列程序之一的“thrgibbs1f90b”,它基于“fortran”并用于 gibbs 采样以估计二进制数据的方差分量。每次我尝试运行 thrgibbs1f90b 时,都会收到以下错误消息:

forrtl: 严重 (157): 程序异常 - 访问冲突

Image               PC                Routine            Line        Source

thrgibbs1f90b.exe    0000000140021961    Unknown    Unknown    Unknown
thrgibbs1f90b.exe    000000014000BB5B    Unknown    Unknown    Unknown
thrgibbs1f90b.exe    000000014026B41C    Unknown    Unknown    Unknown
thrgibbs1f90b.exe    000000014024F4E3    Unknown    Unknown    Unknown
kernel32.dll         0000000076E2652D    Unknown    Unknown    Unknown
ntdll.dll            0000000076F5C521    Unknown    Unknown    Unknown

知道为什么我会收到此消息吗?

谢谢!

【问题讨论】:

【参考方案1】:

两个有根据的猜测

    程序试图读取或写入不存在的数组元素,例如 25 元素数组的第 26 个元素。 为过程指定的虚拟参数与调用过程中的实际参数不匹配;例如,当需要一个 8 字节的值时传递一个 4 字节的实际值(或 反之亦然

其中任何一个都可能导致尝试访问程序的进程无权访问的内存位置。还有许多其他可能的原因,但根据我的经验,这些是导致此类错误消息的 Fortran 程序中最常见的错误。

这两种情况都很容易发现,您需要(重新)编译您的程序并设置编译器选项以检查这些条件

【讨论】:

以上是关于forrtl:严重(157):程序异常 - 访问冲突的主要内容,如果未能解决你的问题,请参考以下文章

forrtl:严重(179):无法分配数组 - 数组大小计算溢出

编写高质量代码改善C#程序的157个建议——建议67:慎用自定义异常

编写高质量代码改善C#程序的157个建议——建议65:总是处理未捕获的异常

编写高质量代码改善C#程序的157个建议——建议68:从System.Exception或其他常见的基本异常中派生异常

编写高质量代码改善C#程序的157个建议——建议66:正确捕获多线程中的异常

编写高质量代码改善C#程序的157个建议——建议86:Parallel中的异常处理