YM“access violation at address xxxx in modul "xx.exe",read of address 0000000?”,

libamboo 2002-07-04 08:05:13
出现这个问题都是在调用报表预览功能关闭的时候,在表单上做了一个按钮,此按钮是用于调用报表的打印预览功能)有时执行此功能时总提示读写地址错误,而且这个错误不定期地出现在不同的可执行表单上(还有由于表单很多,所以我调用的表单方式是用哪个表单,就用new和delete 创建、撤消,菜单调用表单,表单调用表单多层次调用都是这种方法,例:Ty *y=new Ty(this);
y->ShowMadoul;
delete y;




...全文
825 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
libamboo 2002-07-15
  • 打赏
  • 举报
回复
楼上的几位说的都有道理,可是问题一直解决不了,表单调用表单时,为什么只有在报表表单预览关闭的时候才出现此问题,难道真的没人遇到过这个问题吗?还是遇到过没解决了?我现在真的有点绝望了!
iec 2002-07-13
  • 打赏
  • 举报
回复
ok
airspace 2002-07-12
  • 打赏
  • 举报
回复
libamboo,直接检测y是否为NULL即可。
woodheadhn 2002-07-11
  • 打赏
  • 举报
回复
你别用
ShowMadoul
它常出些怪事
用show 试试
Sephil 2002-07-11
  • 打赏
  • 举报
回复
同意 Bird1945(老唬是女人!) 的说法
EasyTDD 2002-07-11
  • 打赏
  • 举报
回复
使用了未初始化的指针,或者试图向实际值为null的对象的某一个属性所在的地址写数据,都会产这个错误。
libamboo 2002-07-10
  • 打赏
  • 举报
回复
airspace:您好?
我没有检测过NEW的返回值,如何检测返回值,您能告诉我吗?
airspace 2002-07-10
  • 打赏
  • 举报
回复
你检测过new的返回值没有?是否出错?
libamboo 2002-07-08
  • 打赏
  • 举报
回复
我这里没有用到什么函数,只是通过按钮创建、撤消用BCB自带的快速报表生成器制作的报表表单,报表自带的CLOSE()功能执行时,自动关闭报表表单,这相当于报表表单自动撤消吗(即delete Y)?
richard_hu 2002-07-08
  • 打赏
  • 举报
回复
一般是错在你灾害美对一个指针分配内存空间的时候就对这块内存进行操作了;或者free掉这块内存了(可能是隐式的,比如函数调用),而后再操作!
whitelion 2002-07-05
  • 打赏
  • 举报
回复
null
microboy 2002-07-05
  • 打赏
  • 举报
回复
现在的计算机配置都是大大的好,如果您的应用程度不是成百上千个FORM,一般就别动态创建了,其实这样在程序运行期花费的时间更多,所以,你就让BCB自动创建它,在使用的时候用XXX->Show();XXX->Hide();即可,写好Show和Hide的事件处理程序
libamboo 2002-07-05
  • 打赏
  • 举报
回复
runnerrunning:您好?

我想问一下 Y=NULL;NULL怎么定义,我试了直接在DELETE Y ; 后面写上这条语句,编译不过去,说‘NULL’为定义。
xrbeck 2002-07-05
  • 打赏
  • 举报
回复
http://www.csdn.net/develop/article/14/14233.shtm
随便看看。。
Bird1945 2002-07-05
  • 打赏
  • 举报
回复
看你这上面这段代码,并没有什么错误.

解决方法
1.
你动态生成时Form时,有一个设置的地方你改了没有?在菜单的

Project-Options-Forms 里,有一个Auto-create froms,你是否把你要动态生

成的Form从这个里面去掉了没有?你若动态生成时,这个要去掉的.


2
如果Form不是很多,比如只有10个左右.

你可以考率一下不用动态生成,看看还有没有这钟错误.

如果没有了,可能就是动态生成的错误,如果还有,你就看看是不是其他的错误.

如你是form1生成form2,form2生成form3,你在form2的OnShow里
把所有form3 new一下,在OnClose里delete他们.


3
你用动态生成Form,那你的Form之间的联系不要太紧了,你的报表要用到数据库
把,那你就把两个Form里的数据控件都独立起来,不要让他们有联系.
看看你的程序里Form之间联系的紧不紧?



我认为用new和delete动态生成Form,并非是很好的方法,一个被Form用得很少
时,可以动态生成减少程序空间;如果用得多,动态生成会减慢程序的速度.

看你这个错误提示,就是上面大家都遇到的错误:估计是可能访问了不存在的内存块。或者是没有分配内存.



kingcaiyao 2002-07-05
  • 打赏
  • 举报
回复
TO贴主:
如果你删除Y,(在没有重新生成窗体实例之前)然后再用y->ShowModal(),也是会产生AV错误的。
libamboo 2002-07-05
  • 打赏
  • 举报
回复
kingcaiyao:您好?
我不太明白删除了y再用y->ShowModal()是什么意思,我用按钮调用的时候每次肯定是先创建在删除,能否给我详细讲解一下,谢谢!
microboy:您好?
由于130多个form我必须用创建、撤消的办法调用form,否则内存占用太大,程序运行会有问题。
runnerrunning 2002-07-05
  • 打赏
  • 举报
回复
Ty *y=new Ty(this);
y->ShowMadoul;
delete y;
y = NULL;
kingcaiyao 2002-07-05
  • 打赏
  • 举报
回复
比如说:下面是最简单的AV错误的例子:
char *s;
ShowMessage(StrPas(s));
libamboo 2002-07-04
  • 打赏
  • 举报
回复
kingcaiyao(AKing) :您好?

在什么情况下会访问不存在的内存块呢?是由于什么原因产生了不存在的内存块,能否详细讲解一下
加载更多回复(5)

13,873

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧