割り当て可能配列はすでに割り当てられています
割り当て可能配列がすでに割り当てられています。
メモリ割り当て済みの配列に再割り当てをする場合に発生しやすいエラーです。Fortran では配列は一旦メモリを割り当てるとサイズが固定され、再割り当てができません。配列を再割り当てする必要がある場合は、配列とは別の変数に再割り当て分のメモリを確保し、元の配列の値をそちらにコピーする方法をとります。
次をFortranで配列を正しく割り当ておよび再割り当てする方法を示すサンプルコードです。
program array_allocation
implicit none
integer, parameter :: n = 5
integer, allocatable :: array1(:)
integer, allocatable :: array2(:)
! 分配数组
allocate(array1(n))
! 使用数组
array1 = [1, 2, 3, 4, 5]
print *, "Array 1:", array1
! 重新分配数组
allocate(array2(2 * n))
array2(1:n) = array1
deallocate(array1)
! 使用新数组
print *, "Array 2:", array2
! 释放内存
deallocate(array2)
end program array_allocation
この例では、最初にサイズの配列array1が割り当てられました。次に、array1にいくつかの値が割り当てられました。次に、allocateステートメントを使用して、サイズが2 * nの配列array2が再割り当てされ、array1の値がarray2にコピーされました。最後に、deallocateステートメントを使用してarray2のメモリが解放されました。
配列を再割り当てする前に、deallocate文で元の配列のメモリを解放してからallocate文で新しい配列のメモリを確保する必要があります。これはFortranでは配列に確保されるメモリは連続しており、配列を再割り当てすると元の配列のメモリが無効になるためです。