我刚刚注意到我正在编写的一个程序中有一些非常有趣的东西。我有一个简单的过程,用 x 类型的对象填充 TStringlist。
当我追踪问题时添加了一个断点,发现指针从 12 开始下降到 1,我希望有人能够解释为什么会发生这种情况或者提供相关文档链接,因为我找不到任何解释。
我的循环从 0 到 11,我在循环中使用的指针被初始化为 nPtr := 0,但在运行程序时,nPtr 变量从 12 开始下降到 1。然后我在循环外部初始化了该变量,如代码片段所示,但是同样的事情仍然发生。该变量在该单元中没有被其他地方使用。
我询问了其中的一位同事,他说这是由于 Delphi 优化造成的,但我想知道它是如何决定影响哪个循环以及为什么会发生这种情况。
感谢您的帮助。
代码:
当我追踪问题时添加了一个断点,发现指针从 12 开始下降到 1,我希望有人能够解释为什么会发生这种情况或者提供相关文档链接,因为我找不到任何解释。
我的循环从 0 到 11,我在循环中使用的指针被初始化为 nPtr := 0,但在运行程序时,nPtr 变量从 12 开始下降到 1。然后我在循环外部初始化了该变量,如代码片段所示,但是同样的事情仍然发生。该变量在该单元中没有被其他地方使用。
我询问了其中的一位同事,他说这是由于 Delphi 优化造成的,但我想知道它是如何决定影响哪个循环以及为什么会发生这种情况。
感谢您的帮助。
代码:
procedure TUnit.ProcedureName;
var
nPtr : Integer;
obj : TObject;
begin
nPtr:=0;//added later
for nPtr := 0 to 11 do
begin
obj := TObject.Create(Self);
slPeriodList.AddObject('X', obj);
end;
end;