2013-07-19 7 views
0

Я работаю над кодом, который сбой. Я понял, что скомпилированная программа вылетает, когда она освобождает переменные, но я не знаю, как ее исправить.Deallocate Statement Causes Crash

Когда я запускаю код, всплывающее окно с Windows, появится говоря:

main.exe has stopped working. Windows can check for a solution to the problem.

и компилятор выдает сообщение Process returned -1073740940 (0xC0000374) execution time : 1.171 s

пыльник есть образец кода:

Subroutine PoissonCode() 
Use Mesh 
Implicit none 
Real(8), Allocatable :: u(:,:),v(:,:),p(:,:) 
Character(50) :: Nome 
Allocate(u(0:Imax,0:jmax),v(0:Imax,0:jmax),p(0:Imax,0:jmax),fx(0:Imax,0:jmax),fy(0:Imax,0:jmax)) 
Allocate(xd(0:Imax),yd(0:Jmax)) 

........Code Here............... 

Deallocate(u,v,p,fx,fy,xd,yd) 
Deallocate(xd,yd) 

End Subroutine PoissonCode 

Я положил полный код here для дальнейшего изучения. Я также пытался запустить код с различными версиями GFortran в Windows 7 x64 и Windows XP x86 без успеха.

Edit:

Правильный конец коды:

... 

Deallocate(u,v,p,fx,fy) 
Deallocate(xd,yd) 

End Subroutine PoissonCode 

Дата:

Я тестировал код с другим компилятором (Intel Visual Fortran) и до сих пор нет успеха.

+0

A ** System ** сбой? Как в [BSOD] (http://en.wikipedia.org/wiki/Blue_Screen_of_Death)? Если нет, пожалуйста, не претендуйте на это. – user2246674

+0

Я положил оператор 'pause' до и после' deallocate'. Это позволяет мне сделать вывод о том, что причиной отказа является, вероятно, причина отказа от дезактивации. – Eleteroboltz

+0

@HighPerformanceMark: У меня была аналогичная проблема не так давно: http://stackoverflow.com/questions/17452243/stalling-at-deallocate. –

ответ

1

D'Uhhhh (всем нам)

Deallocate(u,v,p,fx,fy,xd,yd) 
Deallocate(xd,yd) 

Во второй строке ваша программа (попытки) DEALLOCATE переменные уже высвобождены в первой строке. Я полагаю, что иногда стоит заплатить за отправленный код.

deallocate имеет необязательные аргументы stat и errmsg, которые могут использоваться для улавливания такого рода ошибок и обеспечения альтернативы поведению, которое по умолчанию является причиной сбоя программы.

+0

Извините, вы правы, но я набрал это по ошибке здесь, когда я формулировал вопрос. В моем исходном коде нет этой двойной переменной Deallocated. Я попытался использовать необязательные аргументы, которые вы упомянули, но код останавливается, прежде чем я смогу увидеть параметры ошибки. – Eleteroboltz

+0

OK ... Я нашел ошибку. Код внутри подпрограммы 'PoissonCode' имел доступ к недопустимой позиции массива. Огромное спасибо за помощь. – Eleteroboltz

+0

Да, снова посмотрев на ваш код, вы в 'подпрограмме' PoissonSolve '' p (0: imax, 0: imax) ', но объявили его' p (0: imax, 0: jmax) 'в подпрограмме' PoissonCode' , –