Jan*_*gen 2 delphi 64-bit delphi-11-alexandria
我刚刚注意到这一点:
function DataTransfer(...parameters...) : boolean;
var
LTestQuery, LUpdateQuery: TFDQuery;
begin
Run Code Online (Sandbox Code Playgroud)
在程序开始时:
在 32 位 (Delphi Alexandria 11.1) 中,局部变量 `` 等为 nil
在 64 位 (Delphi Alexandria 11.3 ** )中,它们不是。Assigned()返回 true,var = nil返回 false,对象检查器显示“无法访问值”。
从 32 位迁移到 64 位时这真的是一个变化吗?
那将是一个真正的 PITA,因为我看到我们 10 多个 MLOC 中的许多例程依赖于被初始化为 nil 的本地对象。
当一个例程将 AVFreeAndNil(LTestQuery)作为LTestQuery那些未初始化的 s 之一打开时,我遇到了这一点TFDQuery。
** 目前正在使用 debug dcus 进行编译,因为我正在跟踪此类问题
And*_*and 11
在 32 位(Delphi Alexandria 11.1)中,局部变量``等为零
恐怕这是非常非常错误的。
非托管类型(包括序数类型、指针和对象)的局部变量从未被初始化(为0, nil)。
如果您一直依赖于此,那么您就遇到了错误。当然,最初时不时地0,它们可能是等等,但这只是巧合。nil
现在您知道为什么您的应用程序在某些客户处每隔五天就会崩溃或出现故障......
当你被 AV 撞倒时,你很幸运。您还可以通过写入随机地址来损坏应用程序的内存。理论上,您可以在某处更改货币价值并在一周后发送不正确的发票......
从 32 位迁移到 64 位时这真的是一个变化吗?
不。
那将是一个真正的 PITA,因为我看到我们 10 多个 MLOC 中的许多例程依赖于被初始化为 nil 的本地对象。
这很难。但实际上除了修复错误之外别无选择。
从好的一面来看,你应该庆幸你的公司没有生产起搏器或核导弹的软件!
| 归档时间: |
|
| 查看次数: |
307 次 |
| 最近记录: |