1
12
它包含当时堆栈帧中的任何值。在您的情况下,这将是发件人。如果你把整数输入一个对象,你会注意到“模式”。
|
2
5
首先,你是对的,局部变量 aren't initialised .
声明,因为它没有效力。(您可以添加另一个
|
3
2
只有在两次单击Button1之间不执行其他代码时,才会出现这种情况,最重要的是,这些代码使用的堆栈空间与到达过程TForm1的代码相同(或更多)。Button1Click()使用的堆栈空间相同。除非覆盖堆栈上的值,否则它们仍将包含相同的值。 要测试这一点,您可以添加另一个带有OnClick处理程序的按钮,该处理程序调用的方法的参数比ShowMessage()多。如果在两次单击Button1之间单击该按钮,则int1的值确实应该更改。这是因为Button1Click()中int1的堆栈位置将用于其他处理程序中的一个参数,并被覆盖。 分配应该被优化掉,你可以看到这一点,因为线不应该在边沟区域有蓝点。还应该有一个编译器提示。 编辑: 请注意,这在很大程度上取决于处理程序之前执行的VCL代码,因此对VCL的更改也可能会改变它。甚至可能是各种Delphi版本的行为已经不同了。 |
4
1
局部变量位于堆栈框架中。并且它们没有初始化。
调用前堆栈:
如果调用Button1Click,堆栈如下所示:
如果下次调用Button1Click时,堆栈指针仍在位置X上,并且没有其他函数更改这些值,则会发现Int1的值相同。 如果您有安全的信息,清除局部变量总是明智的(但您有可能会被优化器删除这些状态。因此您需要禁用优化)。 为了好玩,请添加另一个按钮:
|
5
1
你希望它是一样的吗?如果是这样,您可以使用本地常量:
|
6
0
初始化变量可能由内存管理器完成,也可能不由内存管理器完成。 我认为任何内存管理器都可以将所有变量初始化为零(0x000)。这也是在.Net中完成的。 |
Some1Else · 函数在Delphi中重新创建TForm 2 年前 |
Agmcz · Delphi安卓库。so未安装(AAB) 2 年前 |
nader · 如何使用delphi在web上提交表单 6 年前 |
kwadratens · Delphi中的卡方分布函数代码 6 年前 |
user9672569 · 如何在完整的位图图像中绘制阴影效果? 6 年前 |
mmmm · MSBuild(用于Delphi)Make-like功能 6 年前 |