diff options
author | hedin <flame.beholder@gmail.com> | 2019-02-18 15:25:37 +0200 |
---|---|---|
committer | RĂ©mi Verschelde <rverschelde@gmail.com> | 2019-02-20 17:24:58 +0100 |
commit | c496781bf6dda3484b470d1e6d855bd095e71e28 (patch) | |
tree | 12f2d0976ce2332da13626e977f87f49d1271ba0 | |
parent | 9714f701c5667994a3966329dffdc5c864ba201f (diff) |
fixed AStar improper point deletion (leads to crash)
-rw-r--r-- | core/math/a_star.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/core/math/a_star.cpp b/core/math/a_star.cpp index b885a06834..21ec5218b7 100644 --- a/core/math/a_star.cpp +++ b/core/math/a_star.cpp @@ -97,11 +97,14 @@ void AStar::remove_point(int p_id) { Point *p = points[p_id]; - for (Set<Point *>::Element *E = p->neighbours.front(); E; E = E->next()) { - - Segment s(p_id, E->get()->id); - segments.erase(s); - E->get()->neighbours.erase(p); + Map<int, Point *>::Element *PE = points.front(); + while (PE) { + for (Set<Point *>::Element *E = PE->get()->neighbours.front(); E; E = E->next()) { + Segment s(p_id, E->get()->id); + segments.erase(s); + E->get()->neighbours.erase(p); + } + PE = PE->next(); } memdelete(p); |