質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
FORTRAN

FORTRAN(フォートラン)は科学時術計算に向いた手続き型プログラミング言語です。 並列計算の最適化が行いやすい特性上、数値予報および気候モデルなどの大規模な計算を行う分野のスーパーコンピュータで使われています。

Q&A

1回答

213閲覧

f90ファイル実行時のエラー

quarter00000

総合スコア0

FORTRAN

FORTRAN(フォートラン)は科学時術計算に向いた手続き型プログラミング言語です。 並列計算の最適化が行いやすい特性上、数値予報および気候モデルなどの大規模な計算を行う分野のスーパーコンピュータで使われています。

0グッド

0クリップ

投稿2024/01/15 04:37

実現したいこと

ある.f90ファイルを実行したい

発生している問題・分からないこと

.f90ファイルをターミナルでコンパイルした後、./a.outで実行しようとするとエラーが表示された。

エラーメッセージ

error

1Program received signal SIGSEGV: Segmentation fault - invalid memory reference. 2 3Backtrace for this error: 4#0 0x7f0bad623960 in ??? 5#1 0x7f0bad622ac5 in ??? 6#2 0x7f0bad24251f in ??? 7 at ./signal/../sysdeps/unix/sysv/linux/x86_64/libc_sigaction.c:0 8#3 0x55598b12e736 in ??? 9#4 0x55598b12f0b8 in ??? 10#5 0x55598b12f6b6 in ??? 11#6 0x7f0bad229d8f in __libc_start_call_main 12 at ../sysdeps/nptl/libc_start_call_main.h:58 13#7 0x7f0bad229e3f in __libc_start_main_impl 14 at ../csu/libc-start.c:392 15#8 0x55598b12e154 in ??? 16#9 0xffffffffffffffff in ??? 17Segmentation fault 18

該当のソースコード

fortran

1module subprogs 2 implicit none 3contains 4 subroutine inverse_mat_gjp(a0, ai, n) 5 integer, intent(in) :: n 6 real(8), intent(in) :: a0(n, n) 7 real(8), intent(out) :: ai(n, n) 8 integer i, k, is, m, n2 9 real(8) ar, am 10 real(8), allocatable :: a(:, :), w(:) 11 n2 = 2 * n 12 allocate(a(n, n2), w(n2), stat = is) 13 if (is /= 0) stop 'cannot allocate (n is too large)' 14 a(1:n, 1:n) = a0(1:n, 1:n) 15 a(1:n, n+1:2*n) = 0.0d0 16 do i = 1, n 17 a(i, i+n) = 1.0d0 18 end do 19 do k = 1, n 20 m = k 21 am = abs(a(k, k)) 22 do i = k+1, n 23 if (abs(a(i, k)) > am) then 24 am = abs(a(i, k)) 25 m = i 26 endif 27 end do 28 if (am == 0.0d0) stop 'A is singular' 29 if (k /= m) then 30 w(k:n2) = a(k, k:n2) 31 a(k, k:n2) = a(m, k:n2) 32 a(m, k:n2) = w(k:n2) 33 end if 34 ar = 1.0d0 / a(k, k) 35 a(k, k) = 1.0d0 36 a(k, k+1:n2) = ar * a(k, k+1:n2) 37 do i = 1, n 38 if (i /= k) then 39 a(i, k+1:n2) = a(i, k+1:n2) - a(i, k) * a(k, k+1:n2) 40 a(i, k) = 0.0d0 41 end if 42 end do 43 end do 44 ai(1:n, 1:n) = a(1:n, n+1:n2) 45 end subroutine inverse_mat_gjp 46end module subprogs 47 48program main 49 use subprogs 50 implicit none 51 real(8), allocatable :: a(:, :), ai(:, :) 52 integer n, m, i 53 integer :: fi = 10, fo = 11 54 open(fi, file = 'input.d') 55 open(fo, file = 'output.d') 56 read(fi, *) a(:, :) 57 n = size(a, 1) 58 m = size(a, 2) 59 if (n /= m) stop 'not square' 60 call inverse_mat_gjp(a, ai, n) 61 do i = 1, n 62 write(fo, '(10e12.4)') ai(i, 1:n) 63 end do 64 a = matmul(a, ai) 65 close(fi) 66 close(fo) 67end program main 68

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

googleで「terminal segmentation fault invalid memory reference」と検索しましたが英語の記事ばかりで読めませんでした。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

googleで「terminal segmentation fault invalid memory reference」と検索しましたが英語の記事ばかりで読めませんでした。

terminal という単語はエラーメッセージの中に見当たりませんが??

ググればいくらでも出てくると思いますが、「アクセスしても良いメモリの範囲」の外をアクセスしたと言うことです。おそらく、配列の添え字が宣言しているサイズを超えているのでしょう。添え字の値をチェックしましょう。

投稿2024/01/15 11:25

otn

総合スコア84633

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問