Что такое "ошибка шины?"

Что такое "ошибка шины?"

Ниже мой код.

Большое спасибо за ваше время!

    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

3 ответа

Решение

Ошибка шины, которую вы получаете здесь, генерируется путем копирования из numarray в temparray, прежде чем вы выделите temparray. Просто переместите строку ALLOCATE(temparray(numrolls)), прежде чем войти в цикл.

Хороший комментарий об ошибке шины см. Ошибка сегментации.

Это выглядит как temparray используется до его выделения.

Чтобы ответить на ваш вопрос "что такое ошибка шины?" обычно это означает, что ваша программа пыталась получить доступ к несуществующему адресу или адресу, который не имеет правильного выравнивания для этой архитектуры (например, пытается прочитать 32-битное значение из адреса, который не выровнен по кратному 4 байту).

Ваше распределение temparray слишком поздно. Попробуй это:

ALLOCATE(numarray(numexps,numrolls), temparray(numrolls))

и удали второй ALLOCATE,

Чтобы отладить это самостоятельно в следующий раз, скомпилируйте с -g вариант, вот так:

$ gfortran -g code.f95

и запустить его под отладчиком:

$ gdb a.out
gdb> run

тогда он даст вам место аварии.

Другие вопросы по тегам