OpenMP* PRIVATE ALLOCATABLE 配列が未解放

並列領域で割り当てられた PRIVATE ALLOCATABLE ポインター変数は領域の最後で解放されなければなりません。

並列領域の入口で PRIVATE 変数の個別のコピーが各スレッドに割り当てられ、領域の最後でこの変数は破棄されます。変数が ALLOCATABLE ポインター変数の場合、メモリーリークを防ぐために、領域を出る前にストレージを解放しなければなりません。

ID

問題箇所

説明

1

メモリーリーク

ALLOCATABLE ポインターを解放せずに領域が終了された場所


    integer :: OMP_GET_THREAD_NUM
    integer, pointer :: ptr
    integer, pointer :: a(:)
      
    call OMP_SET_NUM_THREADS(2)
    allocate(ptr)
    allocate(a(2))
    ptr = 5
    print *, ptr
!$OMP PARALLEL PRIVATE(ptr) SHARED(a)
    allocate(ptr)
    ptr = 3
!$OMP CRITICAL
    a(OMP_GET_THREAD_NUM()+1) = ptr
!$OMP END CRITICAL
!$OMP END PARALLEL
    print *, a
    end
        

© 2010 Intel Corporation. 無断での引用、転載を禁じます。