-----------
1.错在啦?
var
  AStack:Tstack;
  P,p1:^integer;
  i,j:integer;
begin
  AStack:=Tstack.create;  for i:=1 to 10 do
  begin
  new(p);
  p^:=i;
  Astack.push(p);
  dispose(p);
  end;  p:=Astack.peek;
  j:=p^;
 listbox1.Items.Add(IntTostr(j));
  Astack.free;----
2.create(self);其中 self代表什么?还有其他参数吗?

解决方案 »

  1.   

    create(nil)……很多,但是含义不一样,涉及释放的问题
      

  2.   

    1 new(p);
      p^:=i;
      Astack.push(p);
      dispose(p);  p:=Astack.peek;
      j:=p^;  你的 TStack.Push 压入的是指针,而指针指向的内存已经释放,因此TStack.Pop 取出的是以释放的指针,你如果使用的话,肯定有问题。
      你可以在 Push 后不释放指针,而在 Peek 后,使用完指针,再释放它2 Self 表示当前类对象,例如在 TForm.Create(...) 过程中,Self 表示当前的窗体
      

  3.   

    2.create(self);其中 self代表什么?还有其他参数吗?
    ----觉的前面两位没有说到点子上,我补充一下
    create(owner:tobject);
    里面放的是该组件的owner,还有一个parent,如果动态创建一定要指定的,如果是设计期加入可以通过object treeview来看。parent和owner的区别:组件的owner释放的时候一定要释放它拥有的所有组件才能释放自己,parent主要是和组件的位置,坐标有关。