动态包中使用接口为什么会读内存错? ( 积分: 100 )

  • 主题发起人 主题发起人 wenning
  • 开始时间 开始时间
W

wenning

Unregistered / Unconfirmed
GUEST, unregistred user!
我用动态包作插件,代码大概是这样的
IBOT=interface(IInterface)
property Caption[index:integer]: string read GetCaption;
end;
在包中创建实现此接口的对象后在主程式加入此对象
procedure addbot(bot:IBOT);
var
str: string;
begin
bots.add(bot);
str := bot.caption[0];
log('add bot'+str);
end;
在函数的最后一句肯定会出现读内存错,结果是正常的,log中也加入了记录,主程式已经使用sharemem
 
大家新年好
差点忘了还有问题在这呢

改个问题
当一个类在其它地方释放后
引用变量指向却不为nil
此时用assigned判断是错误的
谁有更好的判断方法?
FreeAndNil是没用的,因为它只会设置释放的变量为nil,其它的指向却是不变的

答不答都无所谓,有人顶贴就放分
 
第二个问题

type TFOO = class x,y:integer
end;

var
a,b: ^TFOO;
begin
new(a)

a^ := TFOO.create;
a^.x := 10
a.y := 20
// a^.x 和 a.x 的结果是一样的,只是对应的汇编有点区别
b := a;
memo1.lines.add( Format(' from b : %d %d',[b.x,b^.y]));
freeAndNil(b^)
// a^ = nil, b^ = nil;
if assigned(a^) then
memo1.lines.add( Format(' from a : %d %d',[a.x,a^.y]))


free(a)

end;
 
接受答案了.
 
后退
顶部