小编Dan*_*Sp.的帖子

Fortran 中的零大小数组到底发生了什么?

我见过几个关于将未分配的数组传递到函数或子例程的问题,这些问题会导致运行时错误,其中推荐的解决方案是在调用过程中以零长度分配它。我做了一些实验:

program test
   integer, allocatable :: A(:)

   allocate(A(3))
   print*, size(A)
   deallocate(A)

   allocate(A(-5:-3))
   print*, size(A)
   deallocate(A)

   allocate(A(0))
   A(0) = 9
   print*,A(0),'Size:',size(a)
   deallocate(a)

   allocate(A(-4))
   print*,size(A)
   deallocate(A)

   allocate(A(-4:-4))
   print*,size(A)
end  
Run Code Online (Sandbox Code Playgroud)

第一个很明显。一个长度为 3 的数组。第二个数组利用了 Fortran 的一个很酷的特性,定义了你自己的索引限制。它是一个长度为 3 的数组,包含元素 A(-5)、A(-4) 和 A(-3)。

第三个变得冒险。我用零分配它。我可以赋值!它打印: 9 尺寸: 0
第四个也打印尺寸为零!

显然,分配长度为 1 且索引为 -4 的数组的正确方法是最后一种。

问题:在第三个和第四个中,我是否只是写入了可能属于其他某个变量的内存(当然,这个示例没有其他变量除外)?

arrays fortran memory-management

5
推荐指数
1
解决办法
1462
查看次数

同一模块中的子程序未找到模块中的 Fortran 函数

我正在用Fortran90编写一个模块,主要是在模块内部定义了一个函数,以及一个使用该函数的子程序。这是模块的摘录

module Mesh_io
  implicit none
  private
contains
  integer function findkey ( )
    content of this function
  end function
  subroutine getNumber_Mesh ()
    integer :: findkey
    content of the routine
  end subroutine getNumber_Mesh
end module
Run Code Online (Sandbox Code Playgroud)

编译时我得到以下输出:

objects/Main.o: In function `__mesh_io_MOD_getnumber_mesh':
Main.f90:(.text+0x9e): undefined reference to `findkey_'
Run Code Online (Sandbox Code Playgroud)

如您所见,该函数包含在模块中,但由于某种原因编译器找不到它。

oop fortran gfortran

2
推荐指数
1
解决办法
1234
查看次数

在启动时加载并呈现第二个视图控制器

我试图在启动时在第一个视图控制器之上呈现第二个视图控制器,而不会关闭第一个视图控制器。这篇文章Swift 3 - 在启动时加载多个 ViewControllers看起来确实有答案。它建议:

添加您的主视图控制器

var secondViewController:UIViewController!
Run Code Online (Sandbox Code Playgroud)

在您的 viewDidLoad 中:

secondViewController: UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "yourIdentifier") as! SecondViewController
Run Code Online (Sandbox Code Playgroud)

就是这样。当您想展示它时,请使用:

self.present(secondViewController, animated: true, completion: nil)  
Run Code Online (Sandbox Code Playgroud)

例如,如果我将它作为一个动作附加到按钮上,那么第三行效果很好。但是,如果它在第一个 viewController 的 viewDidLoad: 中,则它不起作用。这就是我需要的。

如何在启动时自动在第一个 viewController 之上显示第二个 viewController?

uiviewcontroller ios swift swift4

0
推荐指数
1
解决办法
3893
查看次数