gFortran中64位端口REAL数组Cray指针的使用



首先,我不是Fortran开发人员,而是在帮助一些本机应用程序从32位到64位体系结构的移植。

在一个特定的Fortran文件中(它在32位中运行良好(,在64位中发生segfault崩溃。这个问题与使用cray指针指向动态分配给特定大小的实际数组有关。当例程将一堆real读取到该数组中时,它会分段故障。注意:如果我静态地分配一个真正的数组并使用它,那么代码就会正确地从文件中读取并填充数组。以下是一个缩写示例:

real climpack
pointer (pclimpack, climpack)
pclimpack = malloc(ipack)
.....
read(31, iostat=istat) climpack
free(pclimpack)

现在,这段代码可以很好地处理整数(在32位和64位上都可以(,在32位上可以很好的处理实数,但在64位上可以用segfault处理实数。为什么它使用静态分配的数组,而不使用cray指针?我错过了什么?

需要注意的是,我使用gfortran作为编译器

谢谢!

malloc语句中似乎存在一个问题,需要在大小上添加*8,以根据malloc文档说明64位体系结构。有时,只需要晚上睡个好觉,第二天就能看到新鲜的眼睛。

最新更新