gpt4 book ai didi

delphi - 范围检查错误和Delphi 7.0

转载 作者:行者123 更新时间:2023-12-03 15:07:57 24 4
gpt4 key购买 nike

在花了一周时间通过 FastMM4 检查并修复程序的内存泄漏后,我终于在另一台 PC 上测试运行了我的程序。现在,我收到“范围检查错误”。我花了几个小时在网上研究这个问题,但他们似乎都没有给我我想要的东西。我的程序符合运行时错误选项范围检查。所以,我知道这就是我收到错误的原因,但我需要确切地知道引发错误的原因。

该程序是在 XP 上用 Delphi 7.0 编译的。测试PC是Windows 7。一旦启动,我的程序就开始通过串行端口进行通信,然后出现“范围检查错误”消息框。当我停止串行通信时,没有“范围检查错误”框。这是什么意思以及我该如何解决它?我正在寻找简单的策略。我知道我可能会花几天时间逐行检查。

“范围检查错误”由不正确的值分配或访问无法访问的数组索引引起。我对么?

最佳答案

您对范围检查错误的理解是正确的。当您访问数组边界之外的数组时,就会出现它们。例如:

type
TFixedArray = array [0..41] of Integer;
var
a: TFixedArray;
begin
a[42] := 1+2;//!! this is a range check error !!
end;

或者对于动态数组:

var
a: array of Integer;
begin
SetLength(a, 666);
a[665] := 12;//this is fine
a[666] := 42;//!! this is a range check error !!
end;

我已经用赋值来说明了这一点,但是读取索引越界的数组也会产生范围错误。

范围错误应报告发生该错误的地址,然后您可以使用 map 文件将其转换为代码位置。如果您使用 madExcept 或某些此类工具,那就更好了。

<小时/>

更新

由 Ken 提示,documentation说明范围检查选项的影响如下:

In the {$R+} state, all array and string-indexing expressions are verified as being within the defined bounds, and all assignments to scalar and subrange variables are checked to be within range.

关于delphi - 范围检查错误和Delphi 7.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5461871/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com