回 帖 发 新 帖 刷新版面

主题:讨论一下Access Violation (访问冲突)如何解决

bcb中的问题真的很多,还有些问题是在正常运行了一阵以后才出现,莫名其妙。Access Violation (访问冲突)应该是出现最多,最让人摸不着头脑的异常了(我认为  )。

今天写了一小段程序,是三层中的中间层。包括一个远程模块Remomd和一个界面Form1,在Form1中有一个读取:
Edit1->Text=Remomd->Name; 于是出错了(Access Violation at address 004CD87E in module 'MyTest.exe',Read of Address 00000008.)

我也知道是使用指针的错误,就是一些高手们所说的定义了指针但没有赋值就去使用。但我就是不明白,在窗体中添加VCL控件实例后,.h文件中也就只有一些指针定义,没看见有对这些指针赋值得操作,不也可以直接使用吗。比如我要是Edit1->Text=BitBtn1->Name就不会出错。

至于网上有人举例,说如果如下,肯定会出错:
TButton *btn;
btn->Left = 120;
我试了,并没有出错:
1 如果第1句由cb生成(向窗体中拖放按钮),自然没问题。
2 如果两句手工输入,看起来有问题(的确没有初始化btn这个按钮),但实际没有报错。

对于这个Access Violation我真得很迷惑,看了许多网友的回答也没有解决:
http://www.so3w.com/so44/how246843.htm

回复列表 (共5个回复)

沙发

应该不是CB的问题,访问非法内存不一定会立刻出错,但迟早会出错...

板凳

真是好人哪!毛主席保佑你!

不过照您的意思,我还用不用cb啦。问题没有解决呀!请问能不能说一说.h中声明的vcl控件指针的初始化问题?

3 楼

IDE维护的控件指针,不必由用户初始化和销毁。

4 楼

{
今天写了一小段程序,是三层中的中间层。包括一个远程模块Remomd和一个界面Form1,在Form1中有一个读取:
Edit1->Text=Remomd->Name; 于是出错了(Access Violation at address 004CD87E in module 'MyTest.exe',Read of Address 00000008.)
}

这个问题怎么解决呢?

5 楼

TCRemoteDataModule的创建是由“客户端”驱动的,“客户端”访问“服务器”才会使此模块产生实例。你可以看看project->options,数据库模块是在available forms栏。
1 将Remomd拖入auto-create forms

2 在客户端访问服务器之后,进行你的操作

我来回复

您尚未登录,请登录后再回复。点此登录或注册