修改索引后,程序尝试访问无效索引

时间:2019-04-04 16:18:46

标签: netlogo

我开始在模型库中修改Voronoi模型,并尝试使该程序显示Delaunay Triangulation!但是,由于程序尝试访问的索引大于我的列表大小,因此出现错误。

这是我要替换的部分

 ca
  set numpoints 20; adjust if interface expanded to include more points
  let xlist (list 0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16   x17 x18 x19 x20)
  let ylist (list 0 y1 y2 y3 y4 y5 y6 y7 y8 y9 y10 y11 y12 y13 y14 y15 y16 y17 y18 y19 y20)
  let vallist (list 0 val1 val2 val3 val4 val5 val6 val7 val8 val9 val10 val11 val12 val13 val14 val15 val16 val17 val18 val19 val20)
  let onlist (list false point1 point2 point3 point4 point5 point6 point7 point8 point9 point10 point11 point12 point13 point14 point15 point16 point17 point18 point19 point20)

Voronoi program中,我尝试了以下代码:

  set numpoints number
  set onlist (list points)
  set xlist [xcor] of points
 set ylist [ycor] of points
 set vallist [value] of points

  set onlist fput false onlist
  set xlist fput 0 xlist
  set ylist fput 0 ylist
  set vallist fput 0 vallist
  clear-drawing

但这失败了,并带来了灾难性的后果。看 The program failing

我花了3到4个小时来尝试解决此问题。为什么会这样。

1 个答案:

答案 0 :(得分:1)

我认为此特定错误源自以下代码:

malloc()

您已经基于存在的当前点创建了列表,这些点的 create-points numpoints + 1 [ if who != 0 [set shape "circle" set size .6 set color red] setxy item who xlist item who ylist set value item who vallist set label who set label-color black set hidden? not item who onlist set super? false face patch 0 0 ] 值从零到海龟数。然后,您将创建更多点,这些点的who值超过whoxlist等中的条目数。

例如,假设您清除所有内容并创建3只海龟。它们的vallist值分别为0、1和2。如果创建这些龟的who,它将创建一个长度为3个条目的列表。现在,如果您运行xlist代码,则将开始创建新的乌龟。创建的第一个乌龟的create-points numpoints...值为3。现在,如果该乌龟尝试访问who,它将尝试获取索引为3的项目,但仅列出索引值为0、1和2。

修改

item who xlist