什么是“公交车错误”?

| 什么是“公交错误?” 下面是我的代码。 非常感谢您的宝贵时间!
    PROGRAM numbersgen
        IMPLICIT NONE

            !Variable declaration
            INTEGER, DIMENSION(:,:),ALLOCATABLE::numarray
            INTEGER, DIMENSION(:),ALLOCATABLE::temparray
            INTEGER:: numrolls, numexps
            INTEGER:: i=0, j=0
            REAL:: avg=0, sdv=0, variance=0, sum=0
            INTEGER:: k, min, pos, temp


            PRINT*, \"Enter the number of experiments to simulate: \"
            READ*, numexps

            PRINT*, \"Enter the number of rolls per experiment: \"
            READ*, numrolls



     ALLOCATE(numarray(numexps,numrolls))

            -----

    ALLOCATE(temparray(numrolls))


            -----       



        END PROGRAM
    
已邀请:
在分配temparray之前,从numarray复制到temparray会引起您遇到的总线错误。只是移动线      分配(temparray(numrolls)) 在进入循环之前。 有关总线错误的良好注释,请参见分段故障。     
看起来在分配之前先使用了“ 1”。 要回答您的问题“什么是总线错误?”:通常意味着您的程序试图访问一个不存在的地址,或者没有正确对齐的地址 针对该架构(例如,尝试从未对齐4字节倍数的地址中读取32位值)。     
您分配ѭ1来不及了。尝试这个:
ALLOCATE(numarray(numexps,numrolls), temparray(numrolls))
并删除第二个
ALLOCATE
。 要下次自己调试,请使用
-g
选项进行编译,如下所示:
$ gfortran -g code.f95
并在调试器下运行它:
$ gdb a.out
gdb> run
然后它将为您提供崩溃的位置。     

要回复问题请先登录注册