У меня есть программа на Фортране, которая должна давать ошибку сегментации, но это не так - PullRequest
1 голос
/ 01 октября 2019

Так же просто, как и название. У меня есть студент, который получил ошибку сегментации, и я пытался доказать ему, почему это происходит. Вместо этого я подумал, почему это не так.

Код такой:

program main                                                                                 
  implicit none                                                                              
  real*8, allocatable:: u(:)                                                                 
  integer :: i                                                                               
  allocate(u(2))                                                                             


  do i=0, 1000                                                                               
     u(i) = i                                                                                
     print *, u(i)                                                                           

  enddo                                                                                      

end program main

Я бы ожидал, что это произойдет при i=3, но это не так. Составлено с ифортом и гфортраном с -O0 до -O3

1 Ответ

1 голос
/ 01 октября 2019

Как насчет включения опции проверки границ для компиляции и последующего объяснения учащемуся, что ошибка сегмента является обычным результатом для доступа за пределами границ, когда нет дополнительных накладных расходов для проверки границ?

...