我作了一个小东东,运行正常,但退出时总有个错误:
带红叉的消息条:PROJECT XXX.exe raised exception class EinvalidPointer
with message 'Invalid pointer operation',PROCESS stopped....
 之后是 Runtime error 217 at 004027b0.
why?
我利用CPU WINDOW跟踪过错误代码,发现那根本不是我的程序的错,因为给出的错误地址在物理内存中已经被释放,也就是说这时程序代码已经将实际可利用的2G空间全都还给OS了。但是按照DELPHI的提示,由于EXCEPTION 后跟的是一个类名,所以它是LANGUAGE的错。WHO CAN HELP ME?

解决方案 »

  1.   

    现在更严重了,开始时只是退出时出现,现在是刚开始执行应用程序就发生那种错误,害的我连调试其他一些功能都不行了,真悲惨。
    在此期间,我修改了一个对数据库的QUERY的脚本。
    注:我用的是D7(当然是D版)+瘟2000 ADVANCED SERVER(SP3)
      

  2.   

    我早就试过了,在PROGRAM 单元中,BEGIN前只有CONSTS 一个,到了BEGIN 就出错了。
      

  3.   

    这是在PROGRAM UNIT 中,CONSITS后是第一个BEGIN ,还没创建对象哪就。。
      

  4.   

    谢谢大家的帮助,我已经找到问题了,虽然不知道正确与否,但问题确实解决掉了。在这里写出来,请大家指正:
    我在程序的ABOUT中调用Theapstatus 和sharemems,是在UNI CREATE EVENT中申请了一个局部变量,目的是将系统的OS INFO 和 MEM 的总数及占用情况SHOW出来,D7自行将UNIT 头部的USES 后添进了SHAREMEMS。结果编译都不报错,运行时ABOUT退出时出现错误,SHOW出来的东西也是乱七八糟的,于是当时就改了,最后使用TMEMSTATUS 实现了功能,但没有意识到去修改头部的东西。这时候我将注意力放到程序的其他主要功能方面去了,直到都完成了,这个问题却越来越扎眼。
    查找的过程;
    打开DEBUG WINDOWS 中的所有窗口,尤其是MODULAR 和EVENT。
    F9编译运行,红叉来了。快去看CPU WINDOWS和EVENT WINDOWS,他们的中断地址都指向0X。,虽然每次都不尽相同,但都是0X0000ABCD,其中A小于4,大多是3。
    但这地址其实是未分配的地址。而且中断点前的EVENT就是SHAREMEMS在LOAD。
    我删去了UNIT ABOUT 头部的USES后的SHAREMEMS后就一切正常了,TMEMSTATUS不受任何影响。
    查手册:32位系统中程序开始时向OS申请4G的空间,后2G归系统使用,前2G的前4M用于LOAD 程序所用的全局变量及涉及到的RTL、DLL等的接口定义和参数,其余就是STACK等东东了。所以我认为是SHAREMEMS在装载时要么与其他RTL冲突,要么是OS排斥他,究竟怎么回事,谁能告诉我?