使用Fortran堆栈溢出

时间:2012-04-01 15:33:42

标签: fortran stack-overflow

我用Compaq Visual Fortran编写了一个程序。该程序还可以,并且在许多情况下运行正常。我现在正在处理的情况更大,输入数据文件更大,当我运行程序时出现以下错误:

  

forrtl:severe(170):程序异常 - 堆栈溢出

我安装了editbin.exe程序,但我真的不知道如何使用它。输入时

editbin /STACK:4000000 DFDEV.exe

它告诉我它无法打开DFDEV.exe,即使我在包含该程序的目录(C:\ Program Files \ Microsoft Visual Studio \ Common \ MSDEV98 \ BIN)中。 我真的不知道如何解决这个问题,在互联网上我发现的关于这个主题的每个主题都没有关于如何使用这个editbin程序的解释。

1 个答案:

答案 0 :(得分:0)

我还发现编译器“帮助”无益。程序员指南提供了有关堆栈和堆分配的一些单词,可以通过搜索“commit”找到,提示EDITBIN.EXE可用于修改已编译的.exe文件。如后所述,还有编译器选项Project> Settings> Link> Output导致可能指定更大的值但很少指导什么值。

有一个编译器选项可以为子例程中声明的存储假设AUTOMATIC,但是,某些程序可能会依赖于在调用之间“静态”存储的数据,而不是努力指定SAVE。我一直小心SAVE,并没有注意到选择“自动”的任何效果。在我的情况下,麻烦开始后我引入了一点递归(在Burroughs fortran中自动提供 - RECURSIVE关键字是otiose),但堆栈存储也用于临时变量(可能是数组大小)和copy-in,copy-out参数如作为数组部分,或者,例如,传递一个类型为blob的数组,其中blob是一个包含整数的复合实体,并且您希望将整数呈现为数组,如A(i:j).Fred,存储位置,Fred的连续元素实际上并不相邻(stride = 1),因为blob也包含其他项目。

无论如何,我开始使用已分配的数组(以便使用不规则的数组而不是(bigenough,n)等)和其他更改,我刚刚检查并发现该设置已恢复为默认值(空白条目,毫无疑问是由于在电源发生故障后重新安装在新计算机上。