我在lazaus(2.0.6)中的变量声明时遇到了奇怪的行为
如果我按照以下顺序声明变量,则程序将显示SIGSEGV错误,从而停止执行,如果我将初始值分配给TabCellContent var的第二个字段,则会弹出该错误
TabReadActive: Boolean;
ShCol: Array[0..6] of Boolean;
TabCellContent: Array [0..6] of Array [1..50] of TCellContent;
但是如果我将“ TabReadActive”放在Array的声明下面,则程序可以正常运行而不会出现错误
ShCol: Array[0..6] of Boolean;
TabCellContent: Array [0..6] of Array [1..50] of TCellContent;
TabReadActive: Boolean;
有人遇到过相同的行为吗?这是什么原因呢?
原因是访问变量的代码超出范围。超出范围访问数组会导致未定义的行为。声明变量的顺序更改行为只是一个巧合。但这就是不确定行为的本质。很好,它是未定义的。
在编译器选项中启用范围检查,并通过调试器运行程序。这将标识代码中超出界限的数组访问点。