• 締切済み

fortranでsegmentation faultが出る

初めまして。fortran77のとあるプログラム群を扱っているのですが、配列の添字を決めているparameterの数を大きくするとsegmentation faultが出てしまいます。 integer ABC parameter (ABC = 200000) !この値を大きくすると出ます。 hairetsu(ABC) こんな感じです。 プログラムはcygwinで走らせてます。 どなたか解決方法を教えていただけないでしょうか?

みんなの回答

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.2

うーん、300000の大きさの配列が取れないなら別のエラーになるはずですね。 現象が出る最小限のプログラムはありますか?

yo_c_dora
質問者

補足

150000では走りました。 200000にすると以下のようなエラーが出ました。 This problem is probably due to using incompatible versions of the cygwin DLL. Search for cygwin1.dll using the Windows Start->Find/Search facility and delete all but the most recent version. The most recent version *should* reside in x:\cygwin\bin, where 'x' is the drive on which you have installed the cygwin distribution. Rebooting is also suggested if you 250000では同じようにsegmentation faultが出て止まりました。 言い忘れたのですが、このプログラムはmainと複数のsubroutineで構成されています。問題の配列が書かれているファイルがmainに最初にincludeされていて、該当の配列部分が全て変更されるようになっています。 cygwinの限界なんですかね…。

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

hairetsuの宣言はどうなっていますか?200000以上の大きさですか?

yo_c_dora
質問者

補足

200000以上です。300000以上の配列を扱いたいのですが、300000で宣言したところsegmentation faultが出てしまいました…。

関連するQ&A

  • Segmentation Fault (メモリ制限?)

    Segmentation Fault (Fortranのプログラム)に関して質問です。 あるデータを処理するプログラムですが、小さなデータの場合問題ないですが、 大きなデータを扱うようになった場合Segmentation Faultとなります。 宣言している配列サイズを超えた部分のアクセスなどでSegmentation Faultが出ることがあるようですが、どうやらそのような現象ではなく、 メモリ制限にひっかかっている感じがいたします。 エラーが出る部分はどうやらSubroutine内の大きなデータ宣言を している部分のようです。(下の例ではtest bが表示れる以前に止まります。) !-------------------------------------------------- subroutine calc_tri( ) implicit none real*8 data1(3,200000) !<--- ここでエラー --> write(6,*) 'test b' !-------------------------------------------------- このような場合、配列データを減らす以外にどのような対策が あるのでしょうか? あるいはメモリ制限になりそうなデータ数が分る方法などあります でしょうか? 環境は linux (CentOS) intel Fortran Compiler version 8.0 Mem: 1GB topコマンドにて Memの使用割り合いは10%にもならないのですが コンパイラによるメモリ制限などもあるのでしょうか? subroutine内の配列の宣言はデータ数より多くとっていることは確認しています。

  • Segmentation fault

    最短経路問題を解くプログラムを作って完成したのですが、でる時は連続して出てしまうのですが Segmentation fault (core dumped) と表示されてしまいプログラムが実行中なのに途中で終わってしまいます.ほんとうならネットワークの直径が表示されるんですが。。 gcc daijkstra.c ./a アクセスポイント>>> 90 全ネットワーク数>>> 50 Segmentation fault (core dumped) (表示された場合.) gcc daijkstra.c ./a アクセスポイント>>> 90 全ネットワーク数>>> 50 直径>>>>4.432 (成功した場合.)

  • fortranでプログラムをつくったのですが

    fortranでプログラムをつくりました。 コンパイルは成功しているのですが、プログラムが途中で止まってしまいます。 そして「segmentation fault」とエラーが出ます。 このエラーは何を意味しているのでしょうか?

  • 別のPCにファイルを移してコンパイルして実行するとsegmentation faultになる。

    外のPCで正常に動いているプログラムを自分のノートPCでも動かそうと思いソースファイル等必要なものをディレクトリごと移しました。コンパイルはできましたが実行するとプログラムの開始の段階でsegmentation faultになってしまいます。他のPCでは正常に動いているコードなので間違いはないはずです。 cygwin環境です。 これはどういった原因で起こると考えられるでしょうか?

  •  Fortran90を授業でやっています。

     Fortran90を授業でやっています。 入力されたNまでの素数を配列で返す関数をつくって、それを主プログラムで呼び出して素数を出力するという問題です。  素数を関数を用いて配列で返すまでは出来ました。しかし、その関数( Sosuu(N)としました。 )の要素数を(1000)と設定したため、Sosuu(N)の1番目から100番目までは素数が入っているのですが、それ以降の要素は値がすべて0になってしまいます。  なので、WRITE(*,*)Sosuu(N) とすると、素数が列挙された後さらに0が列挙されてしまいます。 0が出力されない方法は何かありませんか?

  • cygwin上でのgtkの画像表示について

    cygwinのX上でgtk2.0を使用して,画像を表示させるプログラムを作成したいのですが,いざ実行しようとすると,Segmentation fault(core dumped)と表示されて,プログラムの実行はできません. Linux上ではうまく動作します. どなたか解決方法がわかる方がいらっしゃれば,教えてください.お願いします.

  • Fortran90/95の出力方法について

    Fortran90/95の出力方法について Fortran95において,変数の値をwrite文で出力した後に改行しない方法を教えてください. 具体的には次のProgram reiを用いて質問します. program rei implicit none integer i, n read(*,*) n do i = 1, n write(*,*) i end do end このプログラムを実行させnに3を代入すると次のように表示されます. 1 2 3 しかし,私としては次のように改行せずに表示させたいのです. 1 2 3 また,諸事情により配列は使用しません. プログラムをどのように改良すればよいのでしょうか.教えてください.

  • Fortranの変数の配列の設定値を計算中に設定するには?

    FortranでプログラムをつくるときAという変数にBの値の範囲で配列を設定する。A(B) このとき、プログラム作成時にはAには具体的な数値を設定しておかなくても良いですが、Bには具体的に配列の数を設定しておく必要があるように思います。  質問は、  プログラムが動く初めにはBに具体的な値を入れず、プログラム作動状況に応じてプログラム作動中にBの配列の範囲を設定できないものでしょうか?

  • fortran90/95のSUM関数について

    fortran90/95のSUM関数について fortran90/95のSUM関数について、SUM関数を使うときは範囲を指定できるのでしょうか? 例えば、 integer A(3,2)/1,2,3,4,5,6/ A=1,4 2,5 3,6 の配列があるとします。 列の和を求めたいのですが、最後の行(3行目)を足したくありません。 結果としては 1+2=3 4+5=9 にしたいのです。 このようなときは、やはりdo文にするしかないのでしょうか。 実際のプログラムではdo文があまりにも多く、見づらいのでSUM関数を使いたいのですが... どなたかご存知の方、お教えいただけないでしょうか。 よろしくお願いします。

  • fortran90

    fortran90 現在 fortran90 で計算プログラムを作っております。 プログラムはかけたのですが、実行画面にエラーが出ます。 解決方法が分かりません。どなたか分かる方いらっしゃいますか。 プログラム implicit real*8 (a-h,o-z) parameter(n=900) open (1,file='004.txt',status='old') do 10 i=1,n read (1,*,end=11)xx,yy,zz,ww theta=acos(zz) phi1=acos(xx/sqrt(1-zz*zz)) phi2=asin(yy/sqrt(1-zz*zz)) write(*,*)theta,phi1,phi2 10 continue 11 end プログラム内容 あるフォルダーに保存してあるテキストファイルから4×4行列のデータを読み込み、そのデータからθの値とφ1、φ2のアタを求めるプログラムです。 実行分のエラー画面には、 acos: DOMAIN error です。

専門家に質問してみよう