0 variables freepascal declaration sequence lazarus
我在 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;
Run Code Online (Sandbox Code Playgroud)
但是如果我将“TabReadActive”放在 Array 的声明下方,则程序正常运行而不会出错
ShCol: Array[0..6] of Boolean;
TabCellContent: Array [0..6] of Array [1..50] of TCellContent;
TabReadActive: Boolean;
Run Code Online (Sandbox Code Playgroud)
有没有人遇到过同样的行为?这是什么原因?
原因是访问变量的代码越界了。越界访问数组会导致未定义的行为。声明变量的顺序会改变这种行为,这只是巧合。但这就是未定义行为的本质。嗯,它是未定义的。
在编译器选项中启用范围检查,并通过调试器运行程序。这将标识代码中访问数组越界的点。