24小时热门版块排行榜    

查看: 2818  |  回复: 9

todd0226

新虫 (初入文坛)

[求助] fortran 调用子程序时,出现program exception-access violation 已有1人参与

大家好,本人fortran新人,编了一段程序,但是在运行时出现了如题所示的错误!
因为程序太长,而且错综复杂,不方便贴出,敬请见谅!
下面我进行一些相关的描述,请各位指导!
我通过debug调试出问题的出处:错误信息出现在subroutine info_nd(...)这一行
其中:step,nelm, nj,nnode 是在主程序中声明的整数常量
           剩余的变量全是数组,全部是动态变量,而且我全部在主程序中进行了allocate,各个数组的维数以及上下界和子程序中声明的完全一样。
调试时,屏幕输出了“info_nd调试开始”,没有输出“info_nd调试第一点”,而且绿色箭头指向了subroutine info_nd(...),所以我断定问题出处在这一行。
我网上搜了一下,这种问题的可能原因之一是数组越界,但是我感觉我的这种定义数组的形式应该不会造成这个问题(?)
此外,有这样一个现象:nj = 6904,nelm=6804的时候,无论debug还是release都会在subroutine info_nd(...)这一行出现如题目所说的问题;但是当我把nj,nelm调小了之后(<6000),发现debug下可以运行成功,但是release仍然出现上述问题。
所以在此请教大家,恳请予以指导!谢谢!


主程序
program main
integer,parameter:: step=10,nj=6904,nelm=6804,nnode=4
......
......   
do istp = 1,step
      ......
      write(*,*)'info_nd调试开始'
      call info_nd(step,istp,nelm,nj,nnode,maxgint,id_el_nd,id_nd_el,num_nd_el,gint_t,gint,elarea,stgp,svars_gp,sig11_nd,sig22_nd,sig12_nd,mises_nd)
      ......
end do
......
end   !主程序结束

出现问题的子程序
subroutine info_nd(step,istp,nelm,nj,nnode,maxgint,id_el_nd,id_nd_el,num_nd_el,gint_t,gint,elarea,stgp,svars_gp,sig11_nd,sig22_nd,sig12_nd,mises_nd)
implicit none

integer   step,istp,nelm,nj,nnode
integer::   id_el_nd(nelm,nnode),id_nd_el(nj,nelm),num_nd_el(nj),gint_t(nelm+1,step),gint(nelm,step),maxgint(step)
real*8::   svars_gp(nelm,20*24,step),elarea(nelm),stgp(3,24*nelm,step)
real*8::   sig_nd_temp(nnode,3),sig11_nd_temp(nj,nelm),sig22_nd_temp(nj,nelm),sig12_nd_temp(nj,nelm)
real*8::   sig11_nd(nj,step),sig22_nd(nj,step),sig12_nd(nj,step),mises_nd(nj,step),area(nj)
real*8::   NTN(nnode,nnode),invNTN(nnode,nnode)
real*8,allocatable::   sig_gp(:,,N(:,,NT(:,,invN(:,
real*8    sigp,tigp
integer   gint_el,gint_iel
integer   iel,igp,i,j,ii

write(*,*)'info_nd调试第一点'
......
end
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pippi6

铁杆木虫 (著名写手)

工程和科学数值计算咨询

【答案】应助回帖

感谢参与,应助指数 +1
在你的makefile (或编译 option)里加上 /check:bounds  /traceback
就会在runtime 时间显示在何处越界。
2楼2014-11-03 18:50:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

todd0226

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by pippi6 at 2014-11-03 18:50:05
在你的makefile (或编译 option)里加上 /check:bounds  /traceback
就会在runtime 时间显示在何处越界。

不好意思,对这个我了解的不多。
你说的在Makefile里加上 /check:bounds  /traceback,Makefile是我编写的源程序文件吗?加在哪个位置?
编译option,这是编译器的选项吗?我用的是Intel visual Fortran编译器,没有找到这一项呀?
3楼2014-11-03 21:35:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

todd0226

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by pippi6 at 2014-11-03 18:50:05
在你的makefile (或编译 option)里加上 /check:bounds  /traceback
就会在runtime 时间显示在何处越界。

我在Intel visual Fortran中找到了/check:bound /trackback,然后调试发现没有出现数组越界的问题。
在运行到subroutine info_nd(...)时,
提示信息说:其原因可能是堆被破坏,这说明NASA_mb05_p1.exe中或它               所加载的任何DLL中有Bug。原因也可能是用户在NASA_mb05_p1.exe具有焦点时按下了F12

其中,不是后一个原因,在运行时我并没有碰到键盘,关于第一个原因,能从中得到哪些信息呢?
4楼2014-11-04 10:12:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pippi6

铁杆木虫 (著名写手)

工程和科学数值计算咨询

【答案】应助回帖

内容已删除
5楼2014-11-04 14:07:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

todd0226

新虫 (初入文坛)

引用回帖:
5楼: Originally posted by pippi6 at 2014-11-04 14:07:08
ok。如果加了 /check:bounds /trackback 没有查到,说明这不是你自编程序中的数组越界。有可能是使用的dll或lib之类的问题。这就很难查了。因为那些软件在编译时没有使用  /check:bounds /trackback 。

最好使用 ...

下面是调试程序运行时出现的信息:
“NASA_mb05_p1.exe”: 已加载“D:\XDT\IVF\NASA_mb05_p1\NASA_mb05_p1\x64\Debug\NASA_mb05_p1.exe”,已加载符号。
“NASA_mb05_p1.exe”: 已加载“C:\Windows\System32\ntdll.dll”
“NASA_mb05_p1.exe”: 已加载“C:\Windows\System32\kernel32.dll”
“NASA_mb05_p1.exe”: 已加载“C:\Windows\System32\KernelBase.dll”
“NASA_mb05_p1.exe”: 已加载“D:\Program Files (x86)\Intel\Composer XE 2013\redist\intel64\compiler\libiomp5md.dll”,已加载符号(去除源信息)。
“NASA_mb05_p1.exe”: 已加载“C:\Windows\System32\imagehlp.dll”
“NASA_mb05_p1.exe”: 已加载“C:\Windows\System32\msvcrt.dll”
“NASA_mb05_p1.exe”: 已加载“C:\Windows\System32\advapi32.dll”
“NASA_mb05_p1.exe”: 已加载“C:\Windows\System32\sechost.dll”
“NASA_mb05_p1.exe”: 已加载“C:\Windows\System32\rpcrt4.dll”
“NASA_mb05_p1.exe”: 已卸载“C:\Windows\System32\advapi32.dll”
“NASA_mb05_p1.exe”: 已卸载“C:\Windows\System32\sechost.dll”
“NASA_mb05_p1.exe”: 已卸载“C:\Windows\System32\rpcrt4.dll”
“NASA_mb05_p1.exe”: 已加载“C:\Windows\System32\advapi32.dll”
“NASA_mb05_p1.exe”: 已加载“C:\Windows\System32\sechost.dll”
“NASA_mb05_p1.exe”: 已加载“C:\Windows\System32\rpcrt4.dll”
“NASA_mb05_p1.exe”: 已卸载“C:\Windows\System32\advapi32.dll”
“NASA_mb05_p1.exe”: 已卸载“C:\Windows\System32\sechost.dll”
“NASA_mb05_p1.exe”: 已卸载“C:\Windows\System32\rpcrt4.dll”
NASA_mb05_p1.exe 中的 0x0000000140586727 处最可能的异常: 0xC0000005: 写入位置 0x000000000000f000 时发生访问冲突
“NASA_mb05_p1.exe”: 已加载“C:\Windows\System32\dbghelp.dll”
HEAP[NASA_mb05_p1.exe]: HEAP: Free Heap block 20a80 modified at 21000 after it was freed
Windows 已在 NASA_mb05_p1.exe 中触发一个断点。

其原因可能是堆被损坏,这说明 NASA_mb05_p1.exe 中或它所加载的任何 DLL 中有 Bug。

原因也可能是用户在 NASA_mb05_p1.exe 具有焦点时按下了 F12。

输出窗口可能提供了更多诊断信息。
程序“[3172] NASA_mb05_p1.exe: 本机”已退出,返回值为 0 (0x0)。

不知道从“HEAP[NASA_mb05_p1.exe]: HEAP: Free Heap block 20a80 modified at 21000 after it was freed”中能得到什么信息吗
6楼2014-11-04 15:55:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pippi6

铁杆木虫 (著名写手)

工程和科学数值计算咨询

引用回帖:
6楼: Originally posted by todd0226 at 2014-11-04 15:55:59
下面是调试程序运行时出现的信息:
“NASA_mb05_p1.exe”: 已加载“D:\XDT\IVF\NASA_mb05_p1\NASA_mb05_p1\x64\Debug\NASA_mb05_p1.exe”,已加载符号。
“NASA_mb05_p1.exe”: 已加载“C:\Windows\System32\ntd ...

No idea。已经不是fortran问题了
7楼2014-11-04 17:20:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

todd0226

新虫 (初入文坛)

引用回帖:
7楼: Originally posted by pippi6 at 2014-11-04 17:20:43
No idea。已经不是fortran问题了...

好的,多谢
8楼2014-11-04 21:08:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

安明三空

铜虫 (初入文坛)

请教一下楼主 我也遇到了同样的问题,请问你是在哪里找到的/check:bounds  /traceback  呢?
9楼2016-05-12 16:32:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

安明三空

铜虫 (初入文坛)

引用回帖:
3楼: Originally posted by todd0226 at 2014-11-03 21:35:45
不好意思,对这个我了解的不多。
你说的在Makefile里加上 /check:bounds  /traceback,Makefile是我编写的源程序文件吗?加在哪个位置?
编译option,这是编译器的选项吗?我用的是Intel visual Fortran编译器, ...

请教楼主 /check:bounds  /traceback 是在哪里找到的呢
10楼2016-05-12 16:33:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 todd0226 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 2026国自然放榜时间 +3 布布和一二 2026-08-08 3/150 2026-08-08 18:15 by Lightingo
[基金申请] 国基金的申报应该改成非等额制,评价高的钱多评价低的钱少,但是增加资助率 +7 a089 2026-08-07 7/350 2026-08-08 18:05 by gltch
[基金申请] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +3 qTvzQBRAHjCi 2026-08-07 4/200 2026-08-08 17:22 by oEVWOejN9taj
[论文投稿] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +3 qTvzQBRAHjCi 2026-08-07 4/200 2026-08-08 16:47 by oEVWOejN9taj
[基金申请] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +3 Vi50GxzrFcSG 2026-08-07 5/250 2026-08-08 16:27 by oEVWOejN9taj
[考博] 售SCI一区T0P文章,我:8O.55.1.O.54,科目全,可伽急 +3 Vi50GxzrFcSG 2026-08-07 4/200 2026-08-08 16:27 by oEVWOejN9taj
[考博] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +3 Vi50GxzrFcSG 2026-08-07 4/200 2026-08-08 16:22 by oEVWOejN9taj
[论文投稿] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 Vi50GxzrFcSG 2026-08-07 6/300 2026-08-08 15:07 by oEVWOejN9taj
[论文投稿] 售SCI一区T0P文章,我:8.O.55.1.O.54,科目齐全,可+急 +3 WQyTGMbfH7Cx 2026-08-07 4/200 2026-08-08 15:02 by oEVWOejN9taj
[硕博家园] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +4 HEQlVqMTIA7d 2026-08-07 6/300 2026-08-08 14:47 by oEVWOejN9taj
[公派出国] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 +3 HEQlVqMTIA7d 2026-08-07 6/300 2026-08-08 14:39 by oEVWOejN9taj
[论文投稿] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +3 HEQlVqMTIA7d 2026-08-07 5/250 2026-08-08 14:22 by oEVWOejN9taj
[论文投稿] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +3 KXLV3nuBVBY7 2026-08-07 6/300 2026-08-08 14:01 by oEVWOejN9taj
[基金申请] 化学口download_prp&amp;fileCode的固定段好像这几天一直没变,有变的大神么? +3 Tide man 2026-08-07 4/200 2026-08-07 22:39 by Tide man
[基金申请] filecode变化情况 +6 布布和一二 2026-08-07 22/1100 2026-08-07 14:45 by 且听虎啸
[基金申请] filecode +8 布布和一二 2026-08-06 11/550 2026-08-06 20:41 by tangpu318
[基金申请] 求各位大神看下 100+6 hpkpkpkp 2026-08-05 33/1650 2026-08-06 14:49 by zhiyanjiang
[基金申请] 影响面上的因素 +8 布布和一二 2026-08-05 11/550 2026-08-06 10:41 by 宝贝虫子
[基金申请] 纯娱乐,不喜欢勿喷 +7 Tide man 2026-08-04 10/500 2026-08-04 15:10 by loufangrui
[基金申请] 什么时候能放榜呀? +3 Jacob678 2026-08-03 3/150 2026-08-03 16:14 by gltch
信息提示
请填处理意见