Skip to Content.
Sympa Menu

cgal-discuss - [cgal-discuss] halfedge->target()->point() segmentation fault

Subject: CGAL users discussion list

List archive

[cgal-discuss] halfedge->target()->point() segmentation fault


Chronological Thread 
  • From: Sterpa <>
  • To:
  • Subject: [cgal-discuss] halfedge->target()->point() segmentation fault
  • Date: Sun, 8 Nov 2009 12:17:08 +0100 (CET)

Halfedge_handle getHalfedge(Arrangement_2 arr, Line_2 l) {
Edge_iterator i = arr.edges_begin();

while(i != arr.edges_end()) {
if(i->curve().line() == l) {
if(i->direction() == CGAL::ARR_RIGHT_TO_LEFT) return
i->twin();
return i;
}
i++;
}

return i;
}


void algorithm_2(vector<Point_2> P, int k) {
vector<Line_2> lines = linesFromPoints(P);
Edge_iterator ei;
int n = P.size();

vector<Halfedge> levels[n];
vector<Segment_2> corridors;

Arrangement_2 arr = getArrangement(lines);

sort(lines.begin(), lines.end(), lineComparison);

for(int i = 0;i < lines.size();i++) {
Line_2 l_1 = lines[i];
std::vector<CGAL::Object> list;
Face_handle face;
Vertex_handle vertex;
Halfedge_handle halfedge;
int level = i;
halfedge = getHalfedge(arr, l_1);

if(halfedge->target()->is_at_open_boundary())
levels[level].push_back(*halfedge);
else while(true) {
levels[level].push_back(*halfedge);

Vertex_handle v = halfedge->target();
Point_2 p = v->point();
cout << p << endl; /* segmentation fault */

Arrangement_2::Halfedge_around_vertex_circulator
v_circ
= v->incident_halfedges();
if(v_circ->curve().line() == l_1) v_circ++;
Line_2 l_2 = v_circ->curve().line();
Line_2 l_vertical = Line_2(-1, 0, x + 1);
Point_2 p_1, p_2;
if(CGAL::do_intersect(l_1, l_vertical)) p_1 =
intersection(l_1, l_vertical);
if(CGAL::do_intersect(l_1, l_vertical)) p_2 =
intersection(l_2, l_vertical);
if(p_1.y() < p_2.y()) level--;
else level++;

Arrangement_2::Halfedge_around_vertex_circulator circ
=
v->incident_halfedges();
while(circ->curve().line() == l_1 || circ->direction()
== halfedge->direction()) circ++;
halfedge = circ;
if(halfedge->direction() == CGAL::ARR_RIGHT_TO_LEFT)
halfedge = halfedge->twin();
if(halfedge->target()->is_at_open_boundary()) {
levels[level].push_back(*halfedge);
break;
}
}
}


I got a segmentation fault trying to access halfedge->target()->point(), but
in
the function getHalfedge() I can access it, how can it be?


  • [cgal-discuss] halfedge->target()->point() segmentation fault, Sterpa, 11/08/2009

Archive powered by MHonArc 2.6.16.

Top of Page