来自SetLength调用的“外部:SIGSEGV”异常

时间:2017-06-21 11:02:09

标签: arrays lazarus

WaitFree Var code in assembler window 在退出程序之前,我在3维动态数组上将数组长度设置为0时出现此异常。如果我没有将它设置为0并退出应用程序,我会在汇编代码中的其他位置获得此异常。我想知道是否有其他人对动态数组有这个问题。我也让它适用于某些尺寸动态阵列。导致错误dblArray(1000,5,21)的最小数组的大小:double数组的数组数组是(1000,25,21),(1000,27,94),(1000,28,94) ),和(1000,29,94)。阵列(1000,18,21)和(1000,26,94)成功退出。如第一个数组所述,所有数组都是双精度数。在第一个维度上将长度设置为0 in足以释放阵列上的内存或者是否必须将所有维度设置为0?此异常不可捕获,无法停止,因此可执行文件行为错误。阵列本身似乎是应用程序整个生命周期中的占位符。它们不会被创建或销毁。有没有其他方式来声明它们。大多数其他问题涉及某种异常是声明错误,如错误类型的变量。对我来说意味着资源或数组以某种方式被绑定,好像应用程序在关闭过程执行之前已经处理掉它。

1 个答案:

答案 0 :(得分:1)

此类错误表示堆损坏。通常是因为您的编写超出了数组的范围。这些写入可能会破坏堆。

您需要调试程序以找出它的哪些特定部分正在访问越界。启用范围检查编译器选项,使编译器发出运行时代码,验证数组访问不使用超出范围的索引。