请问为什么不能new?

brallow 2002-02-02 02:50:49
procedure TfrmMain.BuildSysSNode(iParNDID:integer;iP_ID:integer);
var
adoqeTNT:TADOQuery;
strSqlPar1:string;
strSqlPar2:string;
strSql:string;
i:integer;
iParAIndex,iParTindex:integer;//Par = parent
ptndNewN:PTND;
tnNewN: TTreeNode;
begin
adoqeTNT:=TADOQuery.Create(nil);
adoqeTNT.Connection:=g_adocnMainsys;
strSqlPar1:='select * from TNT where P_ID=';
strSqlpar2:=IntToStr(iP_ID);
strSql:=strSqlPar1+strSqlPar2;
adoqeTNT.SQL.Clear;
adoqeTNT.SQL.Add(strSql);
adoqeTNT.Open;
if(Not adoqeTNT.Active)then
begin
showmessage('Open TNT Error');
exit;
end;
adoqeTNT.First;

for i:=0 to adoqeTNT.RecordCount-1 do
begin
new(ptndNewN);
ptndNewN.iT_ID:=adoqeTNT.Fields[0].AsInteger;
ptndNewN.strCaption:=adoqeTNT.Fields[1].AsString;
ptndNewN.iCType:=adoqeTNT.Fields[4].AsInteger;
ptndNewN.iS_ID:=adoqeTNT.Fields[0].AsInteger;
ptndNewN.iPType:=0;
ptndNewN.iM_ID:=0;
ptndNewN.iG_ID:=0;
ptndNewN.iU_ID:=0;
ptndNewN.iPM:=adoqeTNT.Fields[3].AsInteger;
ptndNewN.iSC:=adoqeTNT.Fields[5].AsInteger;
ptndNewN.iPF:=0;
ptndNewN.iPL:=0;
if(iParNDID=-1)then
begin
tnNewN:=tvMain.Items.AddChildObject(nil,ptndNewN^.strCaption,ptndNewN);
end
else
begin
tnNewN:=tvMain.Items.AddChildObject(tvMain.Items[iParNDID],ptndNewN^.strCaption,ptndNewN);
end;
iParAIndex:=tnNewN.AbsoluteIndex;
iParTIndex:=ptndNewN^.iT_ID;
BuildSysSNode(iParAIndex,iParTIndex);
adoqeTNT.Next;
end;
adoqeTNT.close;
adoqeTNT.Destroy;
end;
现在问题是如果这样运行的话,会在new的地方出错,只能创建一次这个变量?请部这样创建的是动态变量吗?如果是的话,请问为什么不能创建呢?它会出现association错误read of address 0xfffff...或者write of addresss 0xffffff..
...全文
44 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
brallow 2002-02-03
  • 打赏
  • 举报
回复
请问还有没有不用TList的方法?直接一点的?
brallow 2002-02-03
  • 打赏
  • 举报
回复
请问一下,如果使用TND类型的create(默认的)是动态的呢还是在栈中的?我用create可以正常的运行和创建结点了,但是是分配在栈中的,如果递归完成的话,这些指针就无效了
torble 2002-02-02
  • 打赏
  • 举报
回复
不能重复分配已经分配了的指针,如楼上所说,需要保存其地址,下次分配就能在其他堆分配
wyb716 2002-02-02
  • 打赏
  • 举报
回复
对于指针要保存,可用TList来保存。
var lstSave:TList;
lstSave := TList.Create;
lstSave.Add(ptndNewN);

828

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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