【发布时间】:2018-09-21 12:58:04
【问题描述】:
此 Delphi 代码在编译为 32 位时有效,但在编译为 64 位时会出现访问冲突。是代码有问题,还是编译器有问题?
{$APPTYPE CONSOLE}
uses
SysUtils;
const
MaxSize = 2; // nothing special about this value, could equally be 1
type
TArraySize = 1..MaxSize;
procedure Main;
var
size: TArraySize;
arr: array [-MaxSize..MaxSize] of Integer;
begin
FillChar(arr, SizeOf(arr), 0); // zero initialize
size := MaxSize;
Writeln(arr[-size]);
end;
begin
try
Main;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
Readln;
end.
【问题讨论】:
-
当 Kernel.Size = beMaxGaussKernelSize 时,它会在开始时准确地给出 AV
-
我觉得这段代码就够了
-
创建minimal reproducible example 很容易,这样我们就不需要拼凑起来了。想象一下,如果我们可以将一个完整的程序粘贴到我们的编辑器中?这不需要我们付出任何努力。
-
当然。但是为什么要让别人做那些额外的工作。我把你的 sn-ps 变成了minimal reproducible example。这对回答的人来说意义重大。
-
请注意,我现在进一步简化了代码。这是一项非常重要的学习技能。通过这样做,您可以缩小关注问题的任何人的关注范围。尤其是你自己。如果您自己完成此操作并最终得到这样的代码,它会将您带到编译器有缺陷的特定点。
标签: delphi