Связанные указатели в полученном типе? gFortran против Intel

Я хотел бы проверить, был ли указатель в полученном типе уже определен или нет. Я написал следующий простой код, чтобы показать Вам мою проблему:

program test
implicit none

type y
    real(8), pointer :: x(:)
end type y
type(y), pointer :: w(:)

allocate(w(2))
allocate(w(1)%x(2))

write(*,*) associated(w(1)%x), associated(w(2)%x)

end program test

Компилирование этого кодекса с gFortran 4.4.1 и управление им на Ubuntu дают результат:

T F

тогда как тот же кодекс, собранный на Windows Vista с компилятором Intel Fortran 11.0, обеспечивает:

T T

Первый результат (gFortran) - то, что я на самом деле ожидаю. Но то, что компилятор Intel обеспечивает другой результат, заставляет меня бояться, что мой код не мог бы быть правильным. Я делаю что-то ужасно неправильно с указателями в этом примере? Какая-либо идея или объяснение?

Большое спасибо заранее за Вашу помощь!

9
задан remek 18 December 2009 в 13:37
поделиться

1 ответ

Вы проверяете, связан ли указатель, без явного использования обнулить в указателях. Замечания на замечательной странице распространенных ошибок Fortran (с удаленным примером кода):

Многие люди думают, что статус указателя, который никогда не был связан, - .not. связанный. Это неправда. (...) Когда указатель объявлен, его статус не определен, и его нельзя безопасно запросить с связанным встроенным.

Похоже, что компилятор gfortran может быть настроен на явное обнуление указателей при объявлении - вы, вероятно, должны думать об этом, как о том, что компилятор автоматически устанавливает объявленные переменные в ноль и не рассчитывает на такое поведение. Если вы хотите быть уверенным, вы сами аннулируете его.

Правка :

I '

13
ответ дан 4 December 2019 в 15:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: