Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [General] Функции-ссылки и память 
:(
    Опции темы
FCM
Дата 31.10.2009, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



Рассмотрим такой фортран-пример с ссылкой и функцией-ссылкой.
Будем прикреплять ссылку PA(: ) к функции-ссылке, которая из матрицы формирует вектор из положительных значений матрицы. 
Код

PROGRAM PTR111
   IMPLICIT NONE
   REAL, POINTER :: PA(:)
   REAL :: T(2,3)
   T = RESHAPE( (/11.,-12.,13.,-21.,22.,-23./), &
                SHAPE = (/2,3/), ORDER = (/2,1/) )
   PA => PF(T)    ! Прикрепление ссылки к результату функции-ссылки
   WRITE(*,*) 'PA => PF(T) results in PA =  ', PA
   ! Непосредственное использование функции ссылки
   WRITE(*,*) 'PF(-T) = ', PF(-T)

   CONTAINS

      FUNCTION PF(X)
         REAL, POINTER    ::  PF(:)
         REAL, INTENT(IN) ::  X(:,:)
         REAL XT(SIZE(X,2),SIZE(X,1))
         XT = TRANSPOSE(X)
         ALLOCATE( PF( COUNT(X>0) ) )  ! Выделение памяти
         PF = PACK(XT, XT>0)
      END FUNCTION PF

END PROGRAM PTR111



Возникает вопрос, а когда очищается память, выделяемая в функции-ссылке?

PM MAIL   Вверх
popovda
Дата 4.11.2009, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 9.6.2006
Где: Москва

Репутация: нет
Всего: 6



Согласно стандарту: при освобождении указателя PA оператором deallocate(PA).


--------------------
С уважением, Попов Д.А.
PM MAIL   Вверх
FCM
Дата 5.11.2009, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



Наверное, так и есть.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Fortran | Следующая тема »


 




[ Время генерации скрипта: 0.0932 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.