首先,我不是一个Fortran开发人员,而是一个从32位到64位架构的本地应用程序端口。
在一个特定的Fortran文件(在32位中工作得很好),一个64位的分段错误崩溃。该问题与使用动态分配给特定大小的实数组的cray指针有关。当例程将大量的reals读取到数组中时,就会出现分段错误。注意:如果我静态地分配一个真正的数组并使用它,那么代码将正确地从文件中读取并填充数组。下面是一个简短的例子:
real climpack
pointer (pclimpack, climpack)
pclimpack = malloc(ipack)
.....
read(31, iostat=istat) climpack
free(pclimpack)现在,这一段代码可以很好地处理整数( 32位和64位),对于32位上的reals也很好,而对于64位上的reals则很好。为什么它与静态分配的数组一起工作,而不与cray指针一起工作?我遗漏了什么?
应该注意的是,我使用gfortran作为编译器。
谢谢!
发布于 2022-01-12 15:24:40
看起来在malloc语句中出现了一个问题,其中需要在大小中添加一个*8,以说明每个malloc文档的64位体系结构。有时,充足的夜晚,睡眠和新的眼睛,第二天是所需要的。
https://stackoverflow.com/questions/70673696
复制相似问题