Fortran Coder

查看: 16479|回复: 5
打印 上一主题 下一主题

[求助] 关于access violation

[复制链接]

131

帖子

34

主题

0

精华

宗师

F 币
1602 元
贡献
813 点
跳转到指定楼层
楼主
发表于 2020-2-27 23:42:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 andy8496 于 2020-2-27 23:44 编辑

调试一个程序,结果已经正确输出,但是在最后一步,弹出如图1所示提示,黑框没有任何内容。
这时候如果点继续,则出现图3所示窗口,确定后继续显示图1,除非点中断,否则一直显示图3.

换成release的程序,则一直显示图3,点击确定循环出现,除非从任务管理器中结束它。
代码很长,输入的数据量也很大,是一个Program中调用dll,都是自己编写的Fortran程序,
调试时两部分也都是用的debug,一步步跟进去也没啥问题,release运行时两部分也都是用的release。
不知何故,实在很苦恼。
我理解是程序中有些不太严重的错误,在有错误的位置没有及时提示,而是等到最后程序要退出的时候秋后算账。

有没有一种调试方法能找出程序的问题出在哪儿?
或者最不济,有没有什么方法让我在Release时最后能跳过这个错误,毕竟结果已经有了。


3.png (18.32 KB, 下载次数: 286)

3.png

2.png (28.5 KB, 下载次数: 298)

2.png

1.png (25.67 KB, 下载次数: 296)

1.png
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

250

帖子

2

主题

0

精华

宗师

F 币
1731 元
贡献
872 点

规矩勋章

沙发
发表于 2020-2-28 16:37:50 | 只看该作者
一步步跟进去也没啥问题?那怎么出的错误

131

帖子

34

主题

0

精华

宗师

F 币
1602 元
贡献
813 点
板凳
 楼主| 发表于 2020-2-28 17:24:05 | 只看该作者
necrohan 发表于 2020-2-28 16:37
一步步跟进去也没啥问题?那怎么出的错误

对,结果也跟预期一样,用的VS+IVF,能打开的检查项也都打开了
一直到end program的位置停下来出错了

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1643 元
贡献
709 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

地板
发表于 2020-3-1 09:02:20 | 只看该作者
这极可能是堆栈失衡了。
检查一下对程序的调用,特别是第三方函数库或混编的函数调用。
还有可能是主程序里有个数据结构(数组或结构体),传递给子程序的时候,子程序误以为大小比真实的大,所以操作(修改)了超过范围的该数据结构内容。

你说的“秋后算账”,这事还真的是有的。函数返回(包括主程序返回)的时候,会进行堆栈还原等操作。如果此时堆栈失衡,就会出问题。
比如程序准备返回主程序之外(运行时库)的返回点,但是这个返回点原来是存储在堆栈里的,失衡以后被破坏,导致返回失败。(比如要返回 0x00000000就会失败)

35

帖子

11

主题

0

精华

熟手

F 币
241 元
贡献
140 点
5#
发表于 2021-9-14 16:26:24 | 只看该作者
我也碰到这奇怪的东西了,输出都是没问题。。编译也没报错

35

帖子

11

主题

0

精华

熟手

F 币
241 元
贡献
140 点
6#
发表于 2021-9-14 16:28:00 | 只看该作者
还报了“其原因可能是堆被损坏,这说明 foamtogo.exe 中或它所加载的任何 DLL 中有 Bug。

原因也可能是用户在 foamtogo.exe 具有焦点时按下了 F12。”
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-28 08:50

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表