Что такое "ошибка шины?"
Что такое "ошибка шины?"
Ниже мой код.
Большое спасибо за ваше время!
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
тогда он даст вам место аварии.