Fortran中的free()数据类型错误

时间:2018-12-23 02:07:52

标签: fortran intel-fortran

我被要求使用here提供的库,并且我按照说明在Windows中进行构建,这些库位于here

现在,我按要求下载了Intel Parallel Studio XE,并按照说明进行了所有操作,但是代码内部存在一个问题,我无法完全解决该问题。编译器说Error #6362: The data type(s) of the argument(s) are invalid.

麻烦所在的行都是相同的:call free(adr(n))

adr(n)的声明是我不知道它是否正确的原因,因为我有一段时间没碰过FORTRAN 77了。它是:adr(n) = malloc(length*ipa),其中ipalength的定义正确,但是我不知道头文件的其他位置是否已经定义了adr(n)。我应该在顶部添加一个声明(我听说FORTRAN在顶部需要声明)还是应该做其他事情?我所知道的是adr(n)应该是length*ipa个字节,但是如果不是特定类型则不能,我不记得如何像char * adr = (char *) malloc(length*ipa);那样做某事我会用C语言完成的。

2 个答案:

答案 0 :(得分:1)

https://software.intel.com/en-us/forums/intel-visual-fortran-compiler-for-windows/topic/801638处进行了询问和回答。所使用的源将变量声明为integer * 8(非标准),但是正在完成32位构建。由于Intel编译器将malloc和free视为内在函数,因此它检测到不匹配。

答案 1 :(得分:0)

在Fortran中,当您将数组传递给子例程时,不包含索引。通过传递adr(n),您仅将adr的第n个元素传递给子例程。您最有可能希望像这样传递整个数组:

call free(adr)

如果这样做不行,请发布Minimal, Complete, and Verifiable example.

欢迎来到stackoverflow。我建议您参加tour.并学习如何提出好的问题。