频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

Access Violations(访问冲突)

来源: 作者: 出处:巧巧读书 2007-10-09 进入讨论组

  我们的经验是当你发现新装的系统,经过一段时间后开始出现越来越多的问题时(包括AVs),重装系统可以解决绝大多数的问题,并可以提高系统的整体性能。这可能很费时,但绝对有效。库的错误安装了新的库和组件后,应该跟踪一下并看一看是否有对设计期间AVs的更正。

若发生了新的AVs,你也许希望卸载最近安装的组件。如果AVs也消失的话,寻求供应商的支持。同时应对ReadME文件与安装简介多加注意。如果你升级了一个库,这也许需要你改变你的include目录设置,甚至修改你的make文件,来使新旧版本没有冲突。如果可能并且升级程序允许,你应该总是先卸载旧版本后再升级。升级C++Builder我可以保证我不为Inprise工作,也没有得到任何利益。我无法再强调使用C++Builder的新版本的重要意义。AVs的数量尤其是设计期间的AVs在我从CB3升级至CB4(现在已经是CB5啦)后,大大减少了。同时,性能得到提升,有更多可以使用的资源。若你要长跑的话,升级是很值得的。运行期间的AVs尽管跟踪是一场噩梦,运行期间的AVs是可以解决的,它们通常不是C++ Builder中所描述的bugs。在我开始帮你解决你代码中的疑难前,你必须读过并了解设计期间的AVs讯息。本部分中的建议只对运行期间的AVs起作用。尤其注意你的include目录是否包含最新升级的库,这往往是罪魁祸首。如果这些都不能解决你的问题,再让我们讨论编程方面,应该可以解决你的问题,让你回到工作中去。程序退出时发生AVs如果你已经见过你的程序退出时,弹出的AVs对话框,那么恭喜你现在象分享了许多C++Builder程序员一样(包括我)的挫折。这类AVs是最难跟踪的。因为debuger通常会把你引入深不可测的VCL内部或干脆指向工程cpp文件的后括号。但不要害怕,下面的东西将帮你走过你的AV经历中最坏最坏的部分。将你的指针设为空指针!导致AV的一个最大的原因是尝试删除一个非法指针。发生的原因可能使用了一个没有初始化的指针或试图将东西删除两遍。如果你遵照如下指导,可以减少50%的AVs在您的程序中发生。对所有的指针,均如下操作:

  1.声明指针之后,将其设为NULL。没有这么做的话,你不要立刻对这个指针使用new动作。否则当程序退出并执行删除动作的话,指针的地址将变成无意义的。然后你就得到一个AV。

  2.删除一个指针后,将其设为NULL。尽管delete动作已将内存清除,但它并没有清除指针地址。如果后来又删除一次指针的话,将导致一个AV。记住删除一个NULL空指针没有错,也不会带来副作用。使用IDE管理!如果你创建了一个属于(owned by)其他对象的对象,让Owner来删除这个对象。糊涂了?请允许我举个例子解释。如果你动态创建了一个panel对象,并在new方法中将它的Owner设为一个Form(Tpanel MyPanel=new Tpanel(this))。这样当Owner(Form)被删除时,他将尝试删除你的panel。如果你已经删除了…,哇,AV。所以,任何时候当你new一个对象并在构造函数(constructor)中设定了它的Owner,不要手工删除此对象,让Builder来做。若你必须这样做,确保你将它设为NULL。在Form中使用caFree!如果可以,不要手工删除动态创建的form实例,而在其exit 事件中使用caFree.尽管这样做并不一定解决你的访问冲突(AVs)问题,但你可以分离出此原因。因为AV将发生在事件中而不是在程序退出时。

Web: http://www.qqread.com/access/n354669.html 更多文章 更多内容请看Access专家答疑专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
较早的文章:Access数据库规格

较新的文章:Maxthon Access玩转远程登录
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章