runxinzhi.com
首页
百度搜索
Delphi Access violations 问题的解决方法
Delphi Access violations 问题的解决方法
作者: 来源: 发布日期:2007-12-05
在下面的代码里,在调用一个已经被删除了的对象(b:TBitmap)事件后,一个Access violation出现了:
var b:TBitmap;
begin
b:=TBitmap.Create;
try
//对b对象进行一些操作
finally
b.free;
end;
...
//由于b已经被释放,一个Access violation错误将会出现
b.Canvas.TextOut(0,0,’这是一个 Access Violation’);
end;
2. 不存在的API参数
如果你试图给Win API函数传递一个不存在的参数将会出现一个Access violation错误。解决此类Access violation错误的最好方法是查阅Win API帮助,看看这个API函数调用的参数信息以及参数类型。例如,总是保证不给一个缓冲参数传递一个无效指针
3. 让Delphi释放
当一个对象拥有另一个对象时,让它给你做删除工作。因为默认情况下,所有的窗体(自动创建的)都属于Application对象。当一个应用程序结束时,它释放了Application对象,也就释放了所有窗体。例如,如果你在程序开始时自动创建了两个窗体(Form1/Unit1和Form2/Unit2),下面的代码就会导致Access violation错误的出现:
unit Unit1;
...
uses unit2;
...
procedure TForm1.Call_Form2
begin
Form2.ShowModal;
Form2.Free;
//Access violation错误将会出现
Form2.ShowModal;
end;
4. 杀死异常
永远不要破坏临时异常对象(E),处理一个异常会自动释放异常对象。如果你自己手动释放了异常对象,程序会试图再次释放它,那么就会出现Access violation错误:
Zero:=0;
try
dummy:= 10 / Zero;
except
on E: EZeroDivide do
MessageDlg(’不能用0做除数!’,mtError, [mbOK], 0);
E.free. ////Access violation错误将会出现
end;
5. 检索一个空字符串
一个空字符串是没有任何数据的。就是说,检索一个空字符串相当于访问一个不存在的对象,这将导致Access violation错误:
var s: string;
begin
s:=’’;
s[1]:=’a’;
//Access violation错误将会出现
end;
6. 直接引用指针
你必须间接引用指针,否则你会改变指针地址并可能会破坏其他存储单元 :
procedure TForm1.Button1Click(Sender: TObject);
var
p1 : pointer;
p2 : pointer;
begin
GetMem(p1, 128);
GetMem(p2, 128);
//下一行导致Access violation错误
Move(p1, p2, 128);
//下一行方法正确
Move(p1^, p2^, 128);
FreeMem(p1, 128); [Page]
FreeMem(p2, 128);
end;
这些就是我对运行期Access Violation错误的全部建议,我希望你们也能对你们程序出现的Access Violation错误提出一些看法。
老猫点评:相信所有读者都遇到过“Access violation” 的错误,如果不是自己的程序,我们有很多人就把责任都推在Bill Gates的头上。如果你自己的程序出现了这个尴尬的错误,面对用户的询问,我们该如何解释?本文就是最好的答案。
相关阅读:
统计难题(字典树 模版题)
hadoop2.2.0集群安装
HDU 3068 回文串--Manacher
Poj 3974 回文串--Manacher
word模版另存为网页(*.htm,*.html),转为jsp页面并加入数据后导出成word
OpenCV——字符提取并保存
直线检测
图像切边
OpenCV 中轮廓包裹的几个函数boundingRect、minAreaRect、minEnclosingCircle用法
使用级联分类器实现人脸检测(OpenCV自带的数据)
原文地址:https://www.cnblogs.com/feng801/p/1358164.html
最新文章
js观察者模式
js设计模式
javascript的层次
javascript牛逼博客
js的数组
javascript闭包
javascript 事件设计模式
mvc of js
html5
javascript加载顺序
热门文章
js的框架
Javascript基础知识
javascript基础
【165】最失败国家排名
【162】一个程序只能运行一个
MongoDB 复制集 (三) 内部数据同步
MongoDB 复制集(二) 选举 自动故障切换
MongoDB 复制集 (一) 成员介绍
项目说事--又是一年三月三
一步一步学android控件(之二十五)—— SeekBar
Copyright © 2020-2023
润新知