delphi - 范围检查错误和Delphi 7.0

标签 delphi range

在花了一周时间通过 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/

相关文章:

delphi - Delphi 7 中的 Indy 10.6.2 idFTP - 接收文件时文件名中的 native 符号问题 - 可能是 DefStringEncoding 的不良行为

delphi - 创建FileStream时如何处理异常

Swift 结构扩展添加初始值设定项

google-apps-script - 通过选择获取不连续的事件范围并以编程方式使用Google脚本

delphi - 如何获得德尔福天数中的日期差异?

xml - Delphi 由于枚举名称中的连字符导致错误导入 WSDL,我该怎么办?

delphi - 在 Delphi IDE 中排除 EStackoverflow 异常的提示

css - 如何处理 jquery mobile 中 input=range 的样式?

ios - 如何在 iOS swift 4 中获取具有范围的数组的一些值?

列表理解中的 Haskell 惰性