段错误 - 用Fortran无效的内存参考

最近,我在我的Fortran代码段错误 - 用Fortran无效的内存参考

Program received signal SIGSEGV: Segmentation fault - invalid memory reference. 

Backtrace for this error:

#0 0x2AD9B0F8FE08

#1 0x2AD9B0F8EF90

#2 0x2AD9B12D44AF

#3 0x401A3E in MAIN__ at tstreadin.f90:?

和我的代码收到以下错误如下

Program www 

implicit none

integer ::i,j,rows,cols,row

real(kind=8) ::x,y,z

real(kind=8),allocatable::mat(:,:),xrange(:),yrange(:)

real(kind=8),allocatable::pot_bar(:,:),acc_bar_x(:,:),acc_bar_y(:,:)

real(kind=8),allocatable::pot_sph(:,:),acc_sph_x(:,:),acc_sph_y(:,:)

rows=2250000

cols=8

row=1500

allocate(mat(cols,rows))

allocate(xrange(row),yrange(row),pot_bar(row,row))

allocate(acc_bar_x(row,row),acc_bar_y(row,row))

allocate(pot_sph(row,row),acc_sph_x(row,row),acc_sph_y(row,row))

open(24,file='pot.txt',status='old',form='Formatted', access='SEQUENTIAL')

do i=1,rows,1

read(24,*)mat(:,i)

enddo

close(24)

do i=1,rows,row

xrange(i)=mat(1,i)

enddo

do i=1,row,1

yrange(i)=mat(2,i)

enddo

do i=1,row,1

do j=1,row,1

pot_bar(j,i)=mat(3,j+(i-1)*1500)

acc_bar_x(j,i)=mat(4,j+(i-1)*1500)

acc_bar_y(j,i)=mat(5,j+(i-1)*1500)

pot_sph(j,i)=mat(6,j+(i-1)*1500)

acc_sph_x(j,i)=mat(7,j+(i-1)*1500)

acc_sph_x(j,i)=mat(8,j+(i-1)*1500)

enddo

enddo

print*,xrange

print*,yrange

end Program www

我想从ASCII配置文件输入数据数组,所以我编写了测试代码。这是我第一次使用Fortran,而且我完全不明白错误出现的原因。

回答:

数组xrange仅分配了1500个元素。然而在以下

do i=1,rows,row 

xrange(i)=mat(1,i)

enddo

你正试图与索引远远大于1500(行>> 1500)来访问的xrange的元素。因此无效的内存引用。

以上是 段错误 - 用Fortran无效的内存参考 的全部内容, 来源链接: utcz.com/qa/263274.html

回到顶部