我见过几个关于将未分配的数组传递到函数或子例程的问题,这些问题会导致运行时错误,其中推荐的解决方案是在调用过程中以零长度分配它。我做了一些实验:
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 的数组的正确方法是最后一种。
问题:在第三个和第四个中,我是否只是写入了可能属于其他某个变量的内存(当然,这个示例没有其他变量除外)?
我正在用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)
如您所见,该函数包含在模块中,但由于某种原因编译器找不到它。
我试图在启动时在第一个视图控制器之上呈现第二个视图控制器,而不会关闭第一个视图控制器。这篇文章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?