既然是指针,我觉得应该这样使用:
ptndNewN^.iT_ID

解决方案 »

  1.   

    我同意楼上,我觉得也是
    请看delphi的例子:
    type  PListEntry = ^TListEntry;
      TListEntry = record
        Next: PListEntry;
        Text: string;
        Count: Integer;
      end;
    var
      List, P: PListEntry;
    begin
      ...
      New(P);
      P^.Next := List;
      P^.Text := 'Hello world';
      P^.Count := 1;
      List := P;
      ...
    end;
      

  2.   

    老兄,如果我释放了这些个东西那我还要这个变量做什么我就是要放到堆当中,等以后有适当的机会再释放。
    加上p^.。。的效果也是一样的,难到一定要使用List吗?
      

  3.   

    可能是其他代码有问题,不是这段代码的问题。只不过错误在这段代码中爆发罢了。
    另外,参数可以改一下:
    function TfrmMain.AddSNode(fp_adoqeTNT: TADOQuery):integer;
      

  4.   

    跟踪一下,看看你的query在第二次调用时是不是正常的。
      

  5.   

    谢谢名位,不过我的问题我用另外的方法解决了,不知道正不正确
    我在new语句之后又加了一个这条语句
    ptndNewN^:=TNT.create;
    原new语句没有删除,这样一来,可以了,申请的全部动态变量在涵数返回时都没有被删除
    我不知道这个new语句可不可以删除。我还没有试验
    不过我已经跟踪过很多次了,我相信应该就是这个new的问题,每次的错误都停在这条语句
    之后。从我加了这条语句后可以执行看来其它代码或者adoquery都应该没有问题,我想请问一下,到底TNT.create是生成动态变量还是生成静态变量?或者是根据其左边的变量类型而定,例如如果指针就生成动态的。我想这种可能性应该没有吧?
      

  6.   

    原来TNT是一个Class,我还以为是Record。
    Delphi的Class和C++的Class有本质的不同。
    所以利这里最好用ptndnewn: TNT;
    ptndnewn := TNT.Create;
    声明一个Delphi的Class,并没有给Class分配内存,而不过声明了一个指针罢了。只有调用TCLASS.CREATE,才是给类分配内存。
    这种做法虽然隐藏了很多概念,但是比C++先进。所以后来的Java,C#都是这样。
      

  7.   

    我的意思是create分配的内存到底是在栈当中还是有堆当中,还是根据情况而定
      

  8.   

    谢谢,我看了nicrosoft的文章,已经明白了,可是我把new删除了,并且用TND代替了
    ^TND,声明了变量之后,程序就会出错,这又是为什么呢?