使用DelphiXE-7开发一个窗口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。
请相应提出建议。
答案 0 :(得分:3)
全局变量位于应用程序数据段中,它们在程序启动时用零初始化。
在创建对象时,类字段用零初始化(它们可能稍后在构造函数,Loaded()等中填充)。
本地变量的内存(如iNum
)仅在函数调用期间在程序堆栈中动态分配,而本地变量值在未初始化时是随机且不可预测的。这就是初始化是必要步骤的原因。
此规则的例外是编译器管理的类型 - 字符串,接口,变体,动态数组等 - 它们使用空值初始化。