Path: coconuts.jaist!wnoc-tyo-news!news.u-tokyo.ac.jp!news.u-tokyo.ac.jp!makino From: makino@chianti.c.u-tokyo.ac.jp (Jun Makino) Newsgroups: fj.lang.fortran Subject: Re: Dynamic memory with f2c. Date: 08 Oct 1994 08:45:39 GMT Organization: College of Arts and Sciences, Univ. of Tokyo Lines: 60 Message-ID: References: NNTP-Posting-Host: chianti.c.u-tokyo.ac.jp In-reply-to: guemura@rkna50.riken.go.jp's message of Wed, 5 Oct 1994 03:29:34 GMT In article guemura@rkna50.riken.go.jp (Uemura Gen) writes: > 始めまして、植村@理研といいます。 > FAQかもしれませんが、最近gccとf2cをインストールしたので > 仕事関係のプログラムをコンパイルしようとしたらf2cにはpointer > 型が存在しないことが分かり、困っています。 f2c は正しい fortran なのでポインタなんて邪悪なものは、、、売りものの fortran がある機械なら買ってくるのが一番早いような気がします。 > 要は、入力データの大きさに合わせて実行時に動的メモリから > 配列を確保したいのですが、いろいろ試したけどうまく行きません。 > (f2cのfortranにしては厳しい型チェックのせいもある) > そこで、どなたか詳しい方に御教受いただきたく投稿しました。 と、これだけではどうしたものかわかりませんが、 In article guemura@rkna50.riken.go.jp (Uemura Gen) writes: > POINTER (X,IX) > CALL ALLOC_ARRAY(100,X) > CALL USE(100,X) > .... > SUBROUTINE ALLOC_ALLAY(NUM,ARRAY) > ARRAY = MALLOC(NUM*8) > RETURN > .... > SUBROUTINE USE(NUM,X) > DIMENSION X(NUM) > ... > DO 10 I=1,NUM,1 > X(I)= ..... というのをあくまで f2c を使って実現したいのなら、例えば integer x CALL ALLOC_ARRAY(100,X) CALL USE_C(100,X) .... SUBROUTINE USE(NUM,X) DIMENSION X(NUM) ... DO 10 I=1,NUM,1 X(I)= ..... void alloc_array_(int * num, float **x) { *x = (float *)malloc(sizeof(float)*(*num)); } void use_c_(int * num, float **x) { use_(num,*x); } とかするのはどうでしょうかね(fortran のinteger 型が C のポインタと同 じサイズなら)。なお、試したわけじゃないので間違ってても知りません。 牧野@東大駒場