我被要求使用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)
,其中ipa
和length
的定义正确,但是我不知道头文件的其他位置是否已经定义了adr(n)
。我应该在顶部添加一个声明(我听说FORTRAN在顶部需要声明)还是应该做其他事情?我所知道的是adr(n)
应该是length*ipa
个字节,但是如果不是特定类型则不能,我不记得如何像char * adr = (char *) malloc(length*ipa);
那样做某事我会用C语言完成的。
答案 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.并学习如何提出好的问题。