我在ListView的SelectItem事件中,来显示Item.Data的数据。在插入数据时使用的是^Integer,连续点击不同的行,在点击第三次时就出现“Invalid pointer operation”。
大家帮我看看是什么问题。代码如下:
procedure TSysMemberSet.MemberDataSelectItem(Sender: TObject;
Item: TListItem; Selected: Boolean);
var
PrimaryKey : ^Integer;
begin
if (not Selected) or (Item.Data = nil) or (Item.Index < 0) then Exit; try
New(PrimaryKey);
PrimaryKey := Item.Data;
LblMemberID.Caption := IntToStr(PrimaryKey^);
finally
Dispose(PrimaryKey);
end;
end;
大家帮我看看是什么问题。代码如下:
procedure TSysMemberSet.MemberDataSelectItem(Sender: TObject;
Item: TListItem; Selected: Boolean);
var
PrimaryKey : ^Integer;
begin
if (not Selected) or (Item.Data = nil) or (Item.Index < 0) then Exit; try
New(PrimaryKey);
PrimaryKey := Item.Data;
LblMemberID.Caption := IntToStr(PrimaryKey^);
finally
Dispose(PrimaryKey);
end;
end;
只是把指针给它!
procedure TSysMemberSet.MemberDataSelectItem(Sender: TObject;
Item: TListItem; Selected: Boolean);
var
PrimaryKey : ^Integer;
begin
if (not Selected) or (Item.Data = nil) or (Item.Index < 0) then Exit;
New(PrimaryKey);
PrimaryKey := Item.Data;
LblMemberID.Caption := IntToStr(PrimaryKey^);
end;
Item: TListItem; Selected: Boolean);
var
PrimaryKey : ^Integer;
begin
if (not Selected) or (Item.Data = nil) or (Item.Index < 0) then Exit;
LblMemberID.Caption := IntToStr(Item.Data^);
end;
New(PrimaryKey); //这里为它申请了一片空间
PrimaryKey := Item.Data; //这个时候又把PrimaryKey指向Item.Data LblMemberID.Caption := IntToStr(PrimaryKey^);
finally
Dispose(PrimaryKey); //实际上施放的是Item.Data上的内存,原来的空间发生内存泄漏 end;PrimaryKey := Item.Data这里也可以改成PrimaryKey^ := Item.Data^
不过最简单的方法还是我上面写的那样,直接读Item.Data^的值