C++Builder 程序员博客
6 Sep
我BCB下编译后运行的Tool,在有的电脑上提示"Access violation at address 0045FAC7 in module 'RTDTool.exe'.Read of address 00000338"
请教大家一下,这个可能是什么原因造成的?
感激个位指点…
回复
一般是指针访问的问题,比如访问没有分配空间或者已经删除了的指针
我开始也是这么想的,那若是这样的话,我现在发现在部分电脑上运行,不会出现这样的问题,
现在只发现有一个同事出现了这样的问题,若是访问了被删除的指针,那应该是不分操作系统
任何电脑上运行都会出现这样的问题。。。您觉得呢 ??
还有请教一下,windows给出这样的信息,它有一定的提示作用
"Access violation at address 0045FAC7 in module 'RTDTool.exe'.Read of address 00000338"
如何根据这条信息来检查程式错误可能的范围,,因为程序很大,很多人写,也不知道在哪个环节出了问题,,
0045FAC7这个地址是指操作系统给程序分配的内存地址吗?
00000338这个地址又是指哪个地址呢??还是属于一种错误类型??
学习
请楼下高手继续给正解呀,问题解决加分哦@_@
通过map文件确定内存地址非法访问对应的源代码的文件及其函数,然后仔细分析这段代码,即可确定错误。
也可以使用写文件的方式将程序运行时的某些关键参数和调用的函数记录下来,然后就可以大致确定程序运行时出问题的代码的大致位置。
其他方法楼主自己慢慢学习吧。
楼主看来写程序没多久,其实这类内存非法访问的问题是很常见的,写多了就可以很快定位出问题并解决。祝好运。
源码肯定有问题,要逐步查找才能排除,有时打开文件不成功时(不如文件不存在或网络不能访问等)也会导致这样的错误
00000338 一般 338 是一個偏移量,
如:
struct A : public TEdit
{
public :
char *p ; //如果 p 的偏移量,剛好是 338
};
那麼:
A->p = "afdfhtn"; //因為A沒有初始化,= 0 的機會很大,就會出現樓主的AV提示:Read of address 00000338
這類問題,大部分是不正確地使用了指針的問題。
一般,自己定義的類不會太大,也就不會有 338字節,但VCL控件大部分都不止338字節,出現這提示,可能是錯誤地使用了某個VCL控件指針。
"我现在发现在部分电脑上运行,不会出现这样的问题, "
這樣的話,那麼是使用被delete 的指針的機會比較大。表現為在內存小(128M)的電腦上運行出現的機會較大。
多人在寫,如果連哪個模塊都定位不到的話,就該重新考慮你們的程序組織方式了。
上面寫錯了
A->p = "afdfhtn"; 不會出錯。
A *a ;
*(a->p) = 'a'; //這樣就會出錯。
恩,回复楼上,,
因为开发的这个应用程序还是蛮大的,之前一直是国内的同事用,从来没有反映过这样的问题,前段时间几个德国的同事来用,在他们的本本上就出现了
这样的问题,不过现在他们已经回国去了,所以测试环境非常不便,,,
您在理论上讲的很清楚,但能不能帮忙提供比较快捷或者常规的方式来查找或大致定位问题出现的代码区域,因为这个问题不太能预测从什么时候就开始有了,只是之前没有遇到这样特殊的环境,,感激了
顶一下把
友情up
多考虑边界的情况,特别是指针操作的地方要注意。。干脆每个函数加个
try
{
}
catch(…)
{
MessageBox(0,"XXX函数错误!","",MB_OK);
}
感激楼上,的方法理论上可行,貌似有点哪个了,,继续等待楼下高手的经验。。。。