Неверная ссылка на память при открытии файла, который уже существует - PullRequest
0 голосов
/ 28 июня 2019

У меня есть код, который записывает данные в некоторые файлы, я хочу перебрать этот код, чтобы продолжить открытие и запись в файлы с другими параметрами. Однако всякий раз, когда я пытаюсь это сделать, после создания файлов (после первой итерации цикла) появляется сообщение об ошибке:

Программный полученный сигнал SIGSEGV: Ошибка сегментации - недопустимая ссылка на память.

Код будет выглядеть примерно так:

program main
! premable here
DO a=1,10

call something(a, b, c)

END DO

contains

SUBROUTINE something(a, b, c)
!premable + data manipulation

open(12, FILE = 'file.name', STATUS='UNKNOWN')            ! the problem occurs here for 
                                                          ! the second iteration of the loop
                                                          ! in the main
DO i=.... ! general loop for extracting values from array
write(12, '(4F16.12)') b(:, i)
END DO
close(12)

END SUBROUTINE something


end program main

Я пытался использовать STATUS='OLD' вместо 'UNKNOWN' с предварительно созданными пустыми файлами, но это тоже не сработало (фактически с этим цикл даже не завершит первую итерацию).

Я использую компилятор GNU Fortran с Windows и CODE :: BLOCKS.

1 Ответ

0 голосов
/ 01 июля 2019

Вы открываете файл в первом цикле iteraton, а затем пытаетесь открыть его снова во втором случае. Вы не можете сделать это. Откройте файл перед циклом, выполните цикл, затем закройте файл. Если вам нужна подпрограмма в цикле, чтобы сделать это, то, возможно, передайте номер модуля файла (что здесь 12) в подпрограмму.

...