Fortran模块分段故障-GNUFOR
我需要一个专门的Fortran库,这样我就可以动态地编码和可视化,而不是写入文本文件,然后使用Python或Matlab进行绘图。我接着说: 指令没有被清除,所以我没有使用它们的示例,所以我编写了自己的代码。有两个文件:gnu.f90来自网站,以及myplot.f90,我这样写的:Fortran模块分段故障-GNUFOR,fortran,gnuplot,Fortran,Gnuplot,我需要一个专门的Fortran库,这样我就可以动态地编码和可视化,而不是写入文本文件,然后使用Python或Matlab进行绘图。我接着说: 指令没有被清除,所以我没有使用它们的示例,所以我编写了自己的代码。有两个文件:gnu.f90来自网站,以及myplot.f90,我这样写的: program myplot !Declare data types implicit none integer, parameter :: N1 = 50 real(kind=
program myplot
!Declare data types
implicit none
integer, parameter :: N1 = 50
real(kind=8) :: x1(N1),x2(N1)
real(kind=8) :: y1(N1)
real(kind=8) :: y2(N1)
integer :: i
!Generate 2D plot
do i = 1,N1
x1(i) = i
x2(i) = i
end do
y1 = x1**2
y2 = x2**3
!print *, 'Plotting'
!call plot(x1,y1,x2,y2)
call write_xy_data(x1,y1)
end program myplot
显然,从他们的gnufor.f90文件中,我只需要执行以下操作:
写入_xy_数据(X,Y),它应该可以工作。在他们的示例代码中,他们没有使用gnufor.f90作为一个模块,所以我没有在开头写:use gnufor。虽然我试过了,但效果不太好。因此,在我当前的目录中,我有:
gnufor.90
myplot.f90
为了编译它,我在Linux上:gfortran myplot.f90-o test
错误是:
Program received signal SIGSEGV: Segmentation fault - invalid memory reference.
Backtrace for this error:
#0 0x7FB0B051DE08
#1 0x7FB0B051CF90
#2 0x7FB0AFF574AF
#3 0x40302F in write_xy_data_
#4 0x400D7E in MAIN__ at myplot.f90:?
Segmentation fault (core dumped)
非常感谢您的帮助。虽然声明了所有数组大小,但我希望问题出现在我自己的代码中 您链接的网站的gnufor.f90中的子例程
write_xy_data
具有签名
subroutine write_xy_data(data_filename, n, x, y, ierror)
implicit none
character ( len = * ) data_filename
integer ( kind = 4 ) n
real ( kind = 8 ) x(n)
real ( kind = 8 ) y(n)
integer(kind = 4) ierror
这意味着,您必须将其称为
call write_xy_data('myfile',N1,x1,y1,ierr)
作为参数传递要写入的文件名('myfile'
,在示例中),要写入的点数(N1
),数据(x1,y1
)和包含写入成功信息的整数(ierror
,也必须声明此整数)
此外,没有模块
gnufor
,因此不需要use
子句,gnufor.F90中的所有函数都是全局函数,这也是您需要将点数作为额外参数传递的原因,假设形状需要一个明确的接口。请回答问题以显示子程序的接口write_xy_data
。很可能你没有正确地称呼它。[如果有可用的模块,为什么不使用它?]您尝试启动了什么?您说您的编译行是gfortran myplot.f90-o test
,但这不应该是gfortran gnufor.f90 myplot.f90-o test
回溯显示问题出在write_xy_数据中,您没有显示。gfortran附带了许多帮助调试的选项。这些可能对你有帮助。请参阅您的文档。我不知道Fortran,但调用的签名是子例程write\u xy\u data(data\u filename,n,x,y,ierror)
,因此您可能缺少一些参数。你试过编译吗?