Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 对象。是否不需要创建(无)?_Delphi - Fatal编程技术网

Delphi 对象。是否不需要创建(无)?

Delphi 对象。是否不需要创建(无)?,delphi,Delphi,为什么如果我跳过对象创建,我的代码仍在工作? AbUnzipper1.FileName:=“C:\MyFile.zip”从不在运行时引发访问冲突 此(简化)代码来自DLL,没有用于放置组件的表单 uses AbArcTyp, AbUnZper,... ... var AbUnZipper1: TAbUnZipper; begin // AbUnZipper1 := TAbUnZipper.Create(nil); COMMENTED !!!!!!!! AbUnzipper1.Fil

为什么如果我跳过对象创建,我的代码仍在工作?
AbUnzipper1.FileName:=“C:\MyFile.zip”从不在运行时引发访问冲突

此(简化)代码来自DLL,没有用于放置组件的表单

uses AbArcTyp, AbUnZper,...
...
var
  AbUnZipper1: TAbUnZipper;
begin
  // AbUnZipper1 := TAbUnZipper.Create(nil);  COMMENTED !!!!!!!!
  AbUnzipper1.FileName := 'C:\MyFile.zip';
  AbUnzipper1.BaseDirectory := 'C:\temp\MyFolder';
  AbUnzipper1.ExtractOptions := [eoCreateDirs, eoRestorePath];
  AbUnzipper1.ExtractFiles('*');
  AbUnZipper1.Free;
end;

对于代码
AbUnZipper1
是一个未定义的引用(即指针)。访问时的行为未定义。它可能指向有效内存,也可能指向无效内存

如果是后者,当您尝试使用引用时,将遇到运行时错误,即访问冲突。如果是前者,那么您将成功访问内存,但该内存属于程序中的其他内容,您将损坏它

如果您的程序运行没有错误,那么这是偶然的。在这一过程中,您可能会在其他地方损坏内存

您的代码错误,您应该通过还原
AbUnZipper1:=TAbUnZipper.Create(nil)
来修复它


您还应确保在此代码中使用
try/finally
,以避免出现异常时出现内存泄漏。

使用您的代码
时,AbUnZipper1
是一个未定义的引用(即指针)。访问时的行为未定义。它可能指向有效内存,也可能指向无效内存

如果是后者,当您尝试使用引用时,将遇到运行时错误,即访问冲突。如果是前者,那么您将成功访问内存,但该内存属于程序中的其他内容,您将损坏它

如果您的程序运行没有错误,那么这是偶然的。在这一过程中,您可能会在其他地方损坏内存

您的代码错误,您应该通过还原
AbUnZipper1:=TAbUnZipper.Create(nil)
来修复它


您还应确保在此代码中使用
try/finally
,以避免出现异常时内存泄漏。

不创建对象就访问对象是未定义的行为。你很幸运,你的代码没有崩溃或损坏内存,这正是我想知道的。谢谢你,Lebeau先生。访问一个对象而不创建它可能是一种未定义的行为。你很幸运,你的代码没有崩溃或损坏内存,这正是我想知道的。谢谢你,勒博先生。可能是