並列領域で割り当てられた 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. 無断での引用、転載を禁じます。