开发者社区> 问答> 正文

程序长时间运行后出错“XXX.exe 中的 0x70763405 处有未经处理的?报错

问题如下~~~
程序是循环进行数据处理,跑了5min左右后出现如下报错
“XXX.exe 中的 0x70763405 处有未经处理的异常: 0xC0000005: 写入位置 0x00000080 时发生访问冲突”
找到的出错语句如下:
p=fftw_plan_dft_1d( samplenum,filter_time,filter_frequency, FFTW_FORWARD, FFTW_ESTIMATE);
对其反汇编后如下:
0040A43D  push        40h  
0040A43F  push        0FFFFFFFFh  
0040A441  mov         eax,dword ptr [filter_frequency]  
0040A447  push        eax  
0040A448  mov         ecx,dword ptr [filter_time]  
0040A44E  push        ecx  
0040A44F  mov         edx,dword ptr [samplenum (4191C0h)]  
0040A455  push        edx  
0040A456  call        dword ptr [__imp__fftw_plan_dft_1d (4132CCh)]  
0040A45C  add         esp,14h       %%%%%%出错位置在这条语句  
0040A45F  mov         dword ptr [p],eax
 
还请大牛指点!!应该如何更正这样的错误或者如何避免?

展开
收起
爱吃鱼的程序员 2020-06-22 17:02:17 463 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    边界溢出。哈。反正这样的错误有很多名词。通常的出错原因是,望一个数据区域里面写了太多的东西。但还是得写啊,于是把其他存储区域的数据给改写了。

    这个时候通常还不会错,但改写的内容,被当作地址,再次写东东时就错了。哈。这种错误可以通过对循环体的检测来依次判断逻辑哪错了。静态检测绝大多数情况下搞不定的。自己写个测试代码,嵌里面,如果循环量大于存储可用空间,就打印到屏幕上或文件里,修正下值,继续跑。哈。反正别用ide里的debug工具,谁用谁sb,觉得自己不够sb是因为还没遇到复杂的情况。

    回复 @中山野鬼:??回复 @ShiningPig:继续。哈。回复 @中山野鬼:刚刚发现一个问题,程序运行过程中所占内存在逐步增加,当报错的时候已经快占满内存了。。。。是不是因为这个呢?回复 @ShiningPig:你这样,把函数进行注释,看哪段函数没执行,能不出错,那么出错点就在这个里面,但错误不一定全在这里。哈。回复 @中山野鬼:就是对这个出错的函数单独debug? 0x70763405这个地址有点高,一般不是你的程序空间。多为DLL空间,好好检查一下你调用DLL函数的参数有没有不合理的。回复 @ShiningPig:所以只能检查参数是否改变,这个错误貌似是把0x00000080当指针传进去了回复 @小苏打:这个函数是单独下载的库里面带的,内部的东西估计我是看不到的吧……出错应该在0040A456calldwordptr[__imp__fftw_plan_dft_1d(4132CCh)]函数里面
    2020-06-22 17:02:33
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
15分钟打造你自己的小程序 立即下载
小程序 大世界 立即下载
《15分钟打造你自己的小程序》 立即下载