主题:讨论一下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
今天写了一小段程序,是三层中的中间层。包括一个远程模块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