Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在fortran中诊断总线错误_Fortran - Fatal编程技术网

如何在fortran中诊断总线错误

如何在fortran中诊断总线错误,fortran,Fortran,我正在学习如何使用fortran进行数据分析。我正在处理以下示例: program linalg implicit none real :: v1(3), v2(3), m(3,3) integer :: i,j v1(1) = 0.25 v1(2) = 1.2 v1(3) = 0.2 ! use nested do loops to initialise the matrix ! to the unit matrix do i=1,3 do

我正在学习如何使用fortran进行数据分析。我正在处理以下示例:

program linalg
  implicit none

  real :: v1(3), v2(3), m(3,3)
  integer :: i,j

  v1(1) = 0.25
  v1(2) = 1.2
  v1(3) = 0.2

  ! use nested do loops to initialise the matrix
  ! to the unit matrix
  do i=1,3
     do j=1,3
        m(i,j) = 0.0
     end do
     m(i,j) = 1.0
  end do

  ! do a matrix multiplicationof a vector equivalent to v2i = mij v1j
  do i = 1,3
     v2(i) = 0.0
     do j = 1,3
        v2(i) = v2(i) + m(i,j)*v1(j)
     end do
  end do

  write(*,*) 'v2 = ', v2

end program linalg
我用它来执行

f95 -o linalg linalg.f90
./linalg
但是,我在终端中收到以下消息:

Bus error

我在网上看到的一些链接表明,这与没有预先定义变量有关,但我确信我在这个脚本中找到了,并且找不到错误的来源。我会犯这个错误还有其他原因吗

你的错误就在这里

  do i=1,3
     do j=1,3
        m(i,j) = 0.0
     end do
     m(i,j) = 1.0    ! here be a dragon
  end do
Fortran明确指出,循环结束后,索引变量的值比循环最后一次迭代时的值大1。因此在这种情况下,
m(i,j)=1.0
语句将在第一次循环时尝试寻址
m(1,4)
,然后
m(2,4)
,依此类推

有时,如果您试图在数组边界之外进行写操作,就会得到“幸运”,而写操作会停留在您正在处理的进程的地址空间内幸运的是,你的程序是错误的,但没有崩溃——这次崩溃的情况要好得多。
总线错误
表明编译器生成了一个地址,该地址位于任何进程的禁止区域

通过启用编译器的“运行时边界检查”,您可以自己发现这一点。您的编译器文档,或其他Qs,以及这里的Qs,将告诉您如何做到这一点

我会让你按照你的意愿来解决这个问题,现在你知道规则了,你会表现出一切能够解决问题的迹象