Arrays 如何避免FPC编译器上的SIGSEGV错误?

Arrays 如何避免FPC编译器上的SIGSEGV错误?,arrays,lazarus,freepascal,segmentation-fault,Arrays,Lazarus,Freepascal,Segmentation Fault,我正在为我的编程课程开发的程序中遇到了一些访问冲突问题。它是用pascal(本课程使用的语言)和LazarusIDE(类似于Delphi但开放)构建的 据我所知,当您尝试使用或寻址无效内存位置时,会发生访问冲突或SIGSEGV错误。我已经经历了很多,特别是当我没有声明动态数组的长度时 现在看来我的弦有点问题。(或者我可能正在使用多维数组进行除法) 我将仅粘贴SIGSEGV指向的过程,但上下文是: 我有一个整数数组和一个多维数组,其中包含它的幂集(subsubjuntos),错误弹出的函数(如下所

我正在为我的编程课程开发的程序中遇到了一些访问冲突问题。它是用pascal(本课程使用的语言)和LazarusIDE(类似于Delphi但开放)构建的

据我所知,当您尝试使用或寻址无效内存位置时,会发生访问冲突或SIGSEGV错误。我已经经历了很多,特别是当我没有声明动态数组的长度时

现在看来我的弦有点问题。(或者我可能正在使用多维数组进行除法)

我将仅粘贴SIGSEGV指向的过程,但上下文是:

我有一个整数数组和一个多维数组,其中包含它的幂集(subsubjuntos),错误弹出的函数(如下所述)用于将该幂集打印到文本框中(由local索引):


知道它为什么抛出SIGSEGV吗?

动态数组的有效索引范围在
低(arr)
高(arr)
之间。对于动态数组,
low(arr)
始终为零。您试图访问索引为
高(arr)+1
的元素。这是数组的末尾,肯定是一个错误

你写的地方

for i:= 0 to High(subconjuntos)+1 do
应该是

for i:= 0 to High(subconjuntos) do

你的另一个循环也是如此

除此之外,如果
Length(subsubcljuntos[i])
为零,则
subcljuntos[i][0]
是一个越界访问


如果在编译器选项中启用范围检查,则编译器将发出代码来检查每个数组访问的有效性。这样做会更快地导致此类错误

我删除了Delphi标签,因为这个问题不适用于Delphi。Delphi不抛出SIGSEGVs,不使用FPC,因此与此问题无关。在问题标题中包含标签信息也是不合适的;标签系统在这里工作得非常好,可以对问题进行分类,并将它们传递给熟悉这些标签的人。感谢David的耐心。你让我学到了很多。现在它正在工作。我使用了subclarjuntos[I][low(subclarjuntos[I]),它工作得很好。如果
subclarjuntos[I]
nil
则它没有元素,因此
subclarjuntos[I][…]
无论您在内部数组索引中放置什么,它都将是一个错误。因此,您确实需要确保
subsubcljuntos[i]
不是
nil
。另外,简写是写
arr[i,j]
而不是
arr[i][j]
。我不知道FPC采用了arr[i,j]符号。谢谢你的新信息。
for i:= 0 to High(subconjuntos) do
for i:= Low(subconjuntos) to High(subconjuntos) do