我为梯形方法编写了一个程序,但存在分割错误

I wrote a program for the trapizoidal method and there is a segmentation error

提问人:Adrish Chatterjee 提问时间:11/5/2023 最后编辑:Adrish Chatterjee 更新时间:11/5/2023 访问量:44

问:

错误是:- 程序接收信号 SIGSEGV:分段故障 - 无效的内存引用。 该程序用于梯形积分方法,其代码是 法典:-

   program tapizoidal
   implicit none
   real,dimension(:) ,allocatable :: M,O
   integer::n,i,da
   real::a,b,h,x,f,j,I1,c
   !the value of a,b is 1,2
   print*,'input the value of a,b'
   read*,a,b
   print*,'input the value of n'
   read*,n
   !to define the number of arrays M,O
   da=n+1
   h=(b-a)/n
   M(1)=a
   !the x values are
   allocate(M(da))
   do i=2,da,1
   M(i)=M(1)+(i-1)*h
   end do
   !the value of the functions are
   allocate(O(da))
   do i=1,da,1
   x=M(i)
   O(i)=f(x)
   end do
   J=SUM(o)
   !composite term in trapizoidal rule
   c=J-o(1)-o(da)
   !the value of integration
   I1=(h/2)*(O(1)+O(da)+2*c)
   print*,'the value of integration is'
   !the truncation error is
   print*,I1
   print*,'the truncation error',(ABS((I1)-4.75)/4.75)*100,"%"
   end program
   real function f(x)
   implicit none
   real::x
   f=(x**3)+1
   end function

有人可以告诉我我的代码有什么问题吗? 我制作了一个动态数组并尝试通过 allocate 函数分配其值,但编译器显示分段错误。

Fortran 数值方法 动态数组

评论

2赞 Ian Bush 11/5/2023
在分配 M 之前,先访问 M。我没有比这更进一步了。但更一般的是,学习“并使用”使用使用编译器打开运行时检查的标志,用于 gfortran。M(1)=a-fcheck=all
2赞 Vladimir F Героям слава 11/5/2023
欢迎,请参观并阅读如何提问。调试分段错误时,请始终使用编译器的错误检查功能,并始终启用调试符号。使用类似 或 的标志。在集成开发环境中,在调试生成配置文件中启用调试标志。使用这些标志重新编译代码,然后再次运行。在您的问题中显示确切的输出。gfortran -g -fbacktrace -Wall -fcheck=allifort -g -traceback -warn -check
3赞 Vladimir F Героям слава 11/5/2023
关于您的编码,请了解如何使用缩进。Empley 空行和空格插入到行首,使代码结构可见。
0赞 Adrish Chatterjee 11/5/2023
现在它工作了,谢谢兰布什

答: 暂无答案