首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

没辙了。时不时跳出 invalid pointer operation 的异常

2012-03-06 
没辙了。。时不时跳出 invalid pointer operation 的错误。软件代码太多了。。实在不知道该怎么帖。是一个list类

没辙了。。时不时跳出 invalid pointer operation 的错误。
软件代码太多了。。实在不知道该怎么帖。

是一个list类。一个指针列表。大致结构是这样的。
PItem   =   ^TItem;
TItem   =   record
    ID:Integer;
    Name:   string;
    ...
    Icon:TIcon;
    G:TGraphic;
end;

TItemList   =   class
private
    FList:TList;
public
    constructor   create;
    destructor   destroy;   override;
    function   Add:PItem;
    procedure   Clear;
end;

constructor   TItemList.create;
begin
    FList:=   TList.Create;
end;

destructor   TItemList.destroy;  
begin
    Clear;
    FList.Free;
    inherited;
end;
function   TItemList.Add:PItem;
begin
    New(Result);
    FList.Add(Result);
end;

procedure   TItemList.Clear;
var  
    i:   integer;
    p:   PItem;
begin
    for   i:=   0   to   FList.Count   -   1   do   begin
        p:=   PItem(FList.Items[i]);
        if   Assigned(P^.Icon)   then   FreeAndNil(P^.Icon);
        if   Assigned(P^.G)   then   FreeAndNil(P^.G);
        dispose(p);     //   在程序退出的时候,这个地方会出现   invalid   pointer   operation   的错误
    end;
    FList.Clear;
end;

我是从一张数据表中读取数据到这个list中存储,程序运行过程中,反复Clear,   Load,   重新加载这张列表到List中没出现过   invalid   pointer   operation   的错误。
但在程序退出时,时不时的在在dispose(P)处出现这个错误。

实在是不知道怎么解决了,通过NEW申请的内存空间,得到的指针地址是不是永远不会变的?   有什么情况会改变这个指针呢,如果不会变那怎么会在dispose(P)的时候会出现错误的呢?

因为表中的数据可能会有1000条左右吧。new的次数比较多,
以前采用数组指针的时候到没出现这样的错误过。
那个是
PItem_List   =   ^TItemList;
TItem_List   =   array[0..MaxInt   div   SizeOf(TItem)-1]   of   TItem;
然后
TItemList   =   class
    FList:   PItem_List;
end;

但这样在使用上会比较不方便,所以后来改成了指针数组,却时不时的会出现   invalid   pointer   operation   的错误,诚恳解决的方法。

[解决办法]
这里没有看出错误来。

贴文件试试我写的CSDNAtt,到这里下载: http://www.filelet.com
[解决办法]
看错了,不是这里的问题
[解决办法]
是不是Listview和Treeview在free的时候,会把data也释放掉了?

热点排行