怎么没有人说话呢?虽然我也不知道,但是我可以顶一顶delphi中create失败我没有看到过,或者说我只看到过系统资源不足的时候有canvas无法画的错误。

解决方案 »

  1.   

    一般来说都是类设计的有问题
    delphi是没有问题的 
      

  2.   

    type
      Tmyclass=class
        a:string;
        b:Tmyclass;
      end;
    myobject:Tmyclass;
    try
      myobject:=Tmyclass.create;
      myobject.a:=a string;
      myobject.b:=nil
    except
      messagebox(form1.handle,'show error','error',mb_ok);
    end;
      当程序运行一段时间(不定时)后,这段语句回产生异常。
      那位能告诉我原因及解决方法。我建立一个单链表类,然后不断执行添加与删除,用2000的资源管理器没发现是用内存猛上涨,我想知道delphi 的构造器是怎么分配内存的。
      

  3.   

    b:Tmyclass;
    myobject.b:=nil
    是不是
    myobject.b:=tmyclass.create ?create如果出现错误,默认delphi会调用free释放类
    并且不提供错误信息
      

  4.   

    当定义一个类变量时,delphi会分配一个指针,创建时,delphi会创建一块内存区域给类用,而定义的那个指针就会指向这个内存区域,如果创建失败,delphi会释放内存区域,而指针还是存在的。
      

  5.   

    以下是愚见:
    1.如果在Create里面发生了异常,那么这个对象是不会被建立的。2.对象应该是在一个进程的全局堆里分配的,并不是每个对象都用一个
    堆;
    ================================================================曾经有一碗热辣辣的烧猪手面放在我面前,我没有珍惜,等到晾凉了之后才后悔莫及。
      

  6.   

    我想正是由于create分配内存失败以后,我接下来的调用才产生了异常,我想问的是应该怎么解决这个问题?必须让这个操作执行,不能跳过。
    to Jerry529(在猪的海洋里遨游) 
      我的意思是delphi的构造器是不是为每个类创建一个堆,然后这个类的所有实例都从这个堆中分配内存。如果所有的类对象都从默认的进程堆中分配内存的话,根据堆的保护机制,那多线程对内存的访问效率岂不是大大降低了。要这样,自己想创建一个堆,然后从这个堆中分配内存的话,应该怎么实现呢?
      

  7.   

    如果调用了构造函数,delphi就调用类的NewInstance方法分配内存。在调用NewInstance之后,构造器继续进行,初始化对象。构造函数自动设定一个try-except块,如果在构造函数中发生任何异常,delphi就调用析构函数。因为这时对象可能没有构造完全,所以析构函数里必须检查指针是否为nil,但free和freemen过程除外,因为它们总是检查nil指针。
    delphi总是先构造派生类,后构造基类。
    NewInstance方法可以被覆盖,所改变delphi为对象分配内存的方式
    ---《delphi技术手册》中如是说。我也不太懂这些
      

  8.   

    to linx88(haozi) :
    myobject:=Tmyclass.create没有指定owner,后来也没有调用析构器,这个对象怎么销毁?
      

  9.   

    myobject.free;就销毁拉,我运行几个小时,2000管理器中没看到内存有大变化,就是出现了上述异常,不知怎么解决。
      

  10.   

    to darzui(牛肉饭) (  ) 
    我的代码刚开始在我机子上也可以运行,大概过一段时间后才会出现这种异常,也就是说,相当于考机一段时间后才出现的,我不知道该怎么解决,不允许结束程序,也不能跳过这一段代码。
      

  11.   

    如果你只是为了编程,就可以不用管delphi是怎么分配内存的。甚至它会根据你所定义的变量自动分配内存。也可以自己根据所编写的程序看得出是怎样分配的。