如何为矩阵分配内存?
How to allocate memory for a matrix?
我想用Fortran 90为双元矩阵分配内存,下面是对应的C代码:
int dim = 1024;
double *M = (double *)malloc(dim*dim*sizeof(double));
我写了下面的代码,但我无法使用 i>=100
访问 M(i)
:
program matrix
INTEGER :: i,d
CHARACTER(len=32) :: arg
REAL*8 M(*)
POINTER(ptr_M, M)
d=0
if(iargc() == 1) then
call getarg(1, arg)
read(arg, '(I10)') d
end if
print '("Dimension=", i6)', d
!allocate and init matrix
ptr_M = malloc(d*d*8)
do i=1,d*d
M(i) = i
end do
print '("M(i)=", f7.4)', M(100)
call free(ptr_M)
end program matrix
怎么了?
感谢大家,这是我的最终解决方案:
program matrix
IMPLICIT NONE
REAL, ALLOCATABLE :: M(:,:)
INTEGER :: i, j, d
CHARACTER(len=32) :: arg
!specify dimension with programm parameter
if(iargc() == 1) then
call getarg(1, arg)
read(arg, '(I10)') d
end if
!create and init matrix
ALLOCATE (M(d, d))
do i=1,d
do j=1,d
M(i, j) = (i - 1)*d+j
write (*,*) "M(",i,",",j,")=",M(i, j)
end do
end do
DEALLOCATE (M)
end program matrix
使用 ALLOCATABLE 数组,您可以分配一个具有 100 行和 200 列的矩阵,如下所示:
program xalloc
real, allocatable :: x(:,:)
allocate(x(100,200))
end program xalloc
我想用Fortran 90为双元矩阵分配内存,下面是对应的C代码:
int dim = 1024;
double *M = (double *)malloc(dim*dim*sizeof(double));
我写了下面的代码,但我无法使用 i>=100
访问 M(i)
:
program matrix
INTEGER :: i,d
CHARACTER(len=32) :: arg
REAL*8 M(*)
POINTER(ptr_M, M)
d=0
if(iargc() == 1) then
call getarg(1, arg)
read(arg, '(I10)') d
end if
print '("Dimension=", i6)', d
!allocate and init matrix
ptr_M = malloc(d*d*8)
do i=1,d*d
M(i) = i
end do
print '("M(i)=", f7.4)', M(100)
call free(ptr_M)
end program matrix
怎么了?
感谢大家,这是我的最终解决方案:
program matrix
IMPLICIT NONE
REAL, ALLOCATABLE :: M(:,:)
INTEGER :: i, j, d
CHARACTER(len=32) :: arg
!specify dimension with programm parameter
if(iargc() == 1) then
call getarg(1, arg)
read(arg, '(I10)') d
end if
!create and init matrix
ALLOCATE (M(d, d))
do i=1,d
do j=1,d
M(i, j) = (i - 1)*d+j
write (*,*) "M(",i,",",j,")=",M(i, j)
end do
end do
DEALLOCATE (M)
end program matrix
使用 ALLOCATABLE 数组,您可以分配一个具有 100 行和 200 列的矩阵,如下所示:
program xalloc
real, allocatable :: x(:,:)
allocate(x(100,200))
end program xalloc