首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fortran *错误在‘./a.out’:free():无效的下一个大小(正常):0x0e18b000 *

fortran *错误在‘./a.out’:free():无效的下一个大小(正常):0x0e18b000 *
EN

Stack Overflow用户
提问于 2015-10-09 20:15:17
回答 1查看 4.9K关注 0票数 1

我是新来福特兰的。这是我的密码:

代码语言:javascript
复制
  subroutine fft_forward(Q,ier,fftable,ffwork,nfftable,nffwork,     &
 &                       nfft1,nfft2,nfft3,nfftdim1,nfftdim2,       &
 &                       nfftdim3)
  implicit none 

  integer nfft1,nfft2,nfft3,nfftdim1,nfftdim2,nfftdim3
  integer nfftable,nffwork,ier
  double precision,dimension(nfftdim1,nfftdim2,nfftdim3):: Q
  double precision,dimension(nfftable):: fftable
  double precision,dimension(nffwork):: ffwork 

  call pubz3d(Q,ier,nfft1,nfft2,nfft3,nfftdim1,nfftdim2,nfftdim3,   &
 &            fftable,nfftable,ffwork,nffwork)
  write(6,*) 'bye'
  return
  end

我在pubz3d子程序中的不同行放置了一些写语句,它们可以工作(它在最后一行子例程中打印“hi”)。但是子例程不返回任何值,甚至不打印“拜”。

代码语言:javascript
复制
  subroutine pubz3d(Q,ier,nfft1,nfft2,nfft3,nfftdim1,nfftdim2,      &
 &                  nfftdim3,wsave,lensav,work,lenwrk)
  implicit none
  double precision,dimension(nfftdim1,nfftdim2,nfftdim3)::Q
  double precision,dimension(lensav)::wsave      
  double precision,dimension(nfft1)::r
  double precision,dimension(lenwrk)::work
  integer nfft1,nfft2,nfft3,nfftdim1,nfftdim2,nfftdim3,n
  integer lensav,lenwrk,ier
  integer i,j,k

  n = nfftdim1 * nfftdim2 *nfftdim3

  do  k = 1, nfft3
   do  j = 1, nfft2
    do  i = 1,nfft1
      r(i) = Q(i,j,k)
    continue
    call dfft1f(n,1,r,n + 1,wsave,lensav,work,lenwrk,ier)
    do  i = 1,nfft1
     Q(i,j,k) = r(i)
    continue
   continue
  continue

  do  k = 1,nfft3
   do  i = 1,nfft1
    do  j = 1,nfft2
      r(j) = Q(i,j,k)
    continue
    call dfft1f(n,1,r,n + 1,wsave,lensav,work,lenwrk,ier)
    do  j = 1,nfft2
      Q(i,j,k) = r(j)
    continue
   continue
  continue

  do  i = 1, nfft1
   do  j = 1, nfft2
    do  k = 1,nfft3
      r(k) = Q(i,j,k)
    continue
    call dfft1f(n,1,r,n + 1,wsave,lensav,work,lenwrk,ier)
    do  k = 1,nfft3
      Q(i,j,k) = r(k)
    continue
   continue
  continue
  write(6,*) 'hi'
  return
  end

跑步,我得到

代码语言:javascript
复制
hi
*** Error in `./a.out': free(): invalid next size (normal): 0x0e5a9000 ***
Program received signal SIGABRT: Process abort signal.
Backtrace for this error:
#0  0xB760B163
#1  0xB760B800
#2  0xB77103FF
#3  0xB7710424
#4  0xB7416606
#5  0xB7419A32
#6  0xB7450E52
#7  0xB745B339
#8  0xB745BFAC
#9  0x804BD3B in pubz3d_
#10  0x804BFE4 in fft_forward_
#11  0x8055FF4 in do_pmesh_kspace_
#12  0x8054F2D in MAIN__ at main.f:?
Aborted

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-09 22:32:31

你确定是nfft1>nfft2nfft1>nfft3吗?您的辅助变量r有大小nfft1,但是在nfft2nfft3的循环中都使用它。如果其中任何一个都大于nfft1,那么您将得到一个错误。确保r的维数足够大,足以容纳所有三种循环。

如果这不是问题所在,请尝试使用一些数组边界检查进行编译(gfortran-fcheck=allifort-check all以确保安全)。这可能会在某些地方出错时抛出一个信息更丰富的错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33046436

复制
相关文章

相似问题

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