0

我正在处理一个崩溃的代码。我意识到编译的程序在释放变量时会崩溃,但我不知道如何修复它。

当我运行代码时,会出现一个来自 Windows 的弹出窗口:

main.exe has stopped working. Windows can check for a solution to the problem.

并且编译器显示消息Process returned -1073740940 (0xC0000374) execution time : 1.171 s

下面是代码示例:

Subroutine PoissonCode()
Use Mesh
Implicit none
Real(8), Allocatable :: u(:,:),v(:,:),p(:,:)
Character(50) :: Nome
Allocate(u(0:Imax,0:jmax),v(0:Imax,0:jmax),p(0:Imax,0:jmax),fx(0:Imax,0:jmax),fy(0:Imax,0:jmax))
Allocate(xd(0:Imax),yd(0:Jmax))

........Code Here...............

Deallocate(u,v,p,fx,fy,xd,yd)
Deallocate(xd,yd)

End Subroutine PoissonCode

我将完整的代码放在这里以供进一步调查。我还尝试在 Windows 7 x64 和 Windows XP x86 中使用不同版本的 GFortran 运行代码,但没有成功。

编辑:

代码的正确结尾是:

...

Deallocate(u,v,p,fx,fy)
Deallocate(xd,yd)

End Subroutine PoissonCode

更新:

我使用不同的编译器(英特尔 Visual Fortran)测试了代码,但仍然没有成功。

4

1 回答 1

1

D'uhhhh(对我们所有人)

Deallocate(u,v,p,fx,fy,xd,yd)
Deallocate(xd,yd)

在第二行中,您的程序(尝试)释放已在第一行中释放的变量。我想有时阅读发布的代码是值得的。

deallocate具有可选参数staterrmsg可用于捕获此类错误并提供替代默认行为的替代方法,即程序崩溃。

于 2013-07-20T07:07:00.533 回答