Delphi 中变量的默认初始值?
Default initial value of a variable in Delphi?
使用 DelphiXE-7 开发 window-32 位应用程序。
我有以下一段代码-
Procedure TMainForm.Button1Click(Sender: TObject);
Var
iNum: Integer;
bExit: Boolean;
Begin
ShowMessage(IntToStr(iNum));
repeat
Inc(iNum);
bExit := True;
until Exit;
End;
我知道在使用前不初始化iNum可能会出现这个问题,不过调试的时候应该也会出现。
但是当我调试或 运行 编译的 exe MessageBox 显示为 “0” 这似乎是正确的,但是当我们安装构建和 运行 相同的过程然后 MessageBox 显示一些垃圾值而不是零。类似于 “1632824”.
编译生成和生成生成的唯一区别是后面生成的不是生成dcu。
请指教
全局变量在应用程序数据段中,程序启动时用零初始化。
Class 字段在创建对象时用零初始化(它们可能稍后在构造函数、Loaded() 等中填充)。
像您的 iNum
这样的局部变量的内存是在函数调用期间在程序堆栈中动态分配的,并且局部变量值在未初始化时是随机的且不可预测的。这就是为什么初始化是必要的步骤。
此规则的例外是编译器管理的类型 - 字符串、接口、变体、动态数组等 - 它们用空值初始化。
使用 DelphiXE-7 开发 window-32 位应用程序。 我有以下一段代码-
Procedure TMainForm.Button1Click(Sender: TObject);
Var
iNum: Integer;
bExit: Boolean;
Begin
ShowMessage(IntToStr(iNum));
repeat
Inc(iNum);
bExit := True;
until Exit;
End;
我知道在使用前不初始化iNum可能会出现这个问题,不过调试的时候应该也会出现。
但是当我调试或 运行 编译的 exe MessageBox 显示为 “0” 这似乎是正确的,但是当我们安装构建和 运行 相同的过程然后 MessageBox 显示一些垃圾值而不是零。类似于 “1632824”.
编译生成和生成生成的唯一区别是后面生成的不是生成dcu。
请指教
全局变量在应用程序数据段中,程序启动时用零初始化。
Class 字段在创建对象时用零初始化(它们可能稍后在构造函数、Loaded() 等中填充)。
像您的 iNum
这样的局部变量的内存是在函数调用期间在程序堆栈中动态分配的,并且局部变量值在未初始化时是随机的且不可预测的。这就是为什么初始化是必要的步骤。
此规则的例外是编译器管理的类型 - 字符串、接口、变体、动态数组等 - 它们用空值初始化。