Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Fortran > [General] Использование динамического массива в


Автор: Mikha 25.9.2008, 14:33
Добрый день!
Столкнулся со следующей проблемой: при написании внешней функции в качестве формальных параметров указал 4 динамических массива. Поскольку предполагается, что неизвестно сколько на самом деле нужно будет использовать массивов, сделал эти массивы необязательными.
Примерно так:
Код

program test
    interface
        integer function my_func(arr1, arr2, arr3, arr4)
            integer, allocatable, optional:: arr1(:), arr2(:), arr3(:), arr4(:)
        end function my_func
    end interface
    integer ret
    integer, allocatable:: arr1(:)
    ret = my_func(arr1)
end program test
integer function my_func(arr1, arr2, arr3, arr4)
    integer, allocatable, optional:: arr1(:), arr2(:), arr3(:), arr4(:)
    if (present(arr1) .and. present(arr2) .and. present(arr3) .and. present(arr4)) then
        allocate(arr1(1), arr2(2), arr3(3), arr4(4))
    end if
    my_func = 0
end function my_func

В результате выполнения программы вылазит ошибка.
Причем если в программе при вызове функции указать все параметры, то все работает прекрасно.
Подскажите, в чем дело?

Автор: Mikha 26.9.2008, 04:18
Спасибо всем, кто задумался над моей проблемой. Я ее уже решил: поменял allocatable в описании массивов на pointer, и все заработало.

Автор: popovda 2.11.2008, 11:36
Весь вопрос в том, какая ошибка вылезала. С pointer нельзя задать спецификаторы доступа к переменной intent(in|out|inout) в большинстве компиляторов. Будьте внимательнее при работе с ними.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)