首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大型动态数组Fortran声明-seg错误

大型动态数组Fortran声明-seg错误
EN

Stack Overflow用户
提问于 2011-12-16 22:32:57
回答 2查看 658关注 0票数 2

我希望使用allocate( fortran95 (Size))在size=10^7中使用动态声明大型数组,而real和内容real*8 numbers.If size<13*10^6一切运行顺利,没有任何错误,但如果是size>13*10^6,那么我在运行时会得到一个分段错误。使用动态声明很重要,因为数组的大小是在程序中计算的。我使用的是64位Mac和gfortran 4.6,谁能帮帮我?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-16 23:10:34

10**7的real*8元素是76 MiB,所以应该不会有问题(我已经用GFortran成功地分配了几个GiB数组,虽然我没有使用OSX)。你能发布一个完整的例子来进一步分析你的问题吗?

票数 4
EN

Stack Overflow用户

发布于 2011-12-17 00:44:50

下面是一个使用大小为10**8的数组的例子,它适用于我在Mac和gfortran 4.6上的工作。它能在你的电脑上工作吗?

代码语言:javascript
复制
program test_lrg

   integer, parameter :: DoubleReal_K = selected_real_kind (14)
   integer, parameter :: QuadReal_K = selected_real_kind (32)
   integer, parameter :: RegularInt_K = selected_int_kind (8)
   integer, parameter :: VeryLongInt_K = selected_int_kind (18)

   real (DoubleReal_K), dimension (:), allocatable :: array
   integer (RegularInt_K) :: i
   integer (RegularInt_K), parameter :: N = 100000000_RegularInt_K
   real (QuadReal_K) :: sum
   integer (VeryLongInt_K) :: CalcSum

   allocate (array (N))

   do i=1, N
      array (i) = i
   end do

   do i=1, N
      sum = sum + array (i)
   end do
   write (*, *) sum

   CalcSum = N
   CalcSum = ( CalcSum * (CalcSum + 1_VeryLongInt_K) ) / 2_VeryLongInt_K
   write (*, *) CalcSum

   stop

end program test_lrg

尝试使用调试选项进行编译,例如:

代码语言:javascript
复制
-fimplicit-none  -Wall  -Wline-truncation  -Wcharacter-truncation  -Wsurprising  -Waliasing  -Wimplicit-interface  -Wunused-parameter  -fwhole-file  -fcheck=bounds  -fcheck=do  -fcheck=mem  -fcheck=recursion  -std=f2008  -pedantic  -fbacktrace
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8535619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档