【发布时间】:2010-11-18 05:16:11
【问题描述】:
我得到以下内容
Access violation at address 00404340 in module 'test.exe'. Read of address FFFFFFD5
使用以下代码
var
List: TStrings;
在创建部分:List:= TStringList.Create;
添加到列表中:Result := List.AddObject('hi', aCreatedObject);
MessageDlg(FunctionHookList.Objects[Result].ClassName, mtInformation, [mbOK], 0);
消息对话框显示正确的类名
但后来当我这样做时,
i := list.IndexOf('hi');
if i >= 0 then
if list.Objects[i] <> nil then
if assigned(list.Objects[i]) then
begin
tmp := list.Objects[i];
if tmp <> nil then
MessageDlg(tmp.ClassName, mtInformation, [mbOK], 0); //*******
end;
我在//******* 行上遇到了上述访问冲突
我知道那里有一些重复的代码,但我试图检查 'everything'
【问题讨论】:
-
你说的“稍后”是什么意思?可能当时 aCreatedObject 已被销毁,并且 list.Objects[i] 返回一个无效对象。请在一个完整的函数中发布一个带有变量声明的示例。
-
如果索引 i 处的对象为 nil,您的代码会检查两次,如果已分配,则检查一次。您可以将 Objects[i] 分配给 tmp 一次并检查 tmp:
if i >= 0 then begin tmp := Objects[i]; if Assigned(tmp) then ... -
@Ozan,aCreatedObject 可能已被破坏,我认为我过度使用
<> nil和assigned会抓住它。 -
@mjustin 我的原始代码确实看起来有点像,但我不断添加检查以希望找到一些答案。我打算'在它开始工作后'简化它
标签: delphi delphi-7 access-violation