corrected bug in the UpdateTopology::EdgeEdge function: it touched a vector element beyond .end()

This commit is contained in:
Paolo Cignoni 2012-04-22 09:01:04 +00:00
parent 39df21640a
commit 4c44513d4f
1 changed files with 7 additions and 3 deletions

View File

@ -467,10 +467,12 @@ static void EdgeEdge(MeshType &m)
int ne = 0; // Numero di edge reali int ne = 0; // Numero di edge reali
typename std::vector<PVertexEdge>::iterator pe,ps; typename std::vector<PVertexEdge>::iterator pe,ps;
for(ps = v.begin(),pe=v.begin();pe<=v.end();++pe) // Scansione vettore ausiliario // for(ps = v.begin(),pe=v.begin();pe<=v.end();++pe) // Scansione vettore ausiliario
ps = v.begin();pe=v.begin();
do
{ {
// printf("v %i -> e %i\n",tri::Index(m,(*ps).v),tri::Index(m,(*ps).e)); // printf("v %i -> e %i\n",tri::Index(m,(*ps).v),tri::Index(m,(*ps).e));
if( pe==v.end() || *pe != *ps ) // Trovo blocco di edge uguali if( pe==v.end() || !(*pe == *ps) ) // Trovo blocco di edge uguali
{ {
typename std::vector<PVertexEdge>::iterator q,q_next; typename std::vector<PVertexEdge>::iterator q,q_next;
for (q=ps;q<pe-1;++q) // Scansione edge associati for (q=ps;q<pe-1;++q) // Scansione edge associati
@ -491,7 +493,9 @@ static void EdgeEdge(MeshType &m)
ps = pe; ps = pe;
++ne; // Aggiorno il numero di edge ++ne; // Aggiorno il numero di edge
} }
} if(pe==v.end()) break;
++pe;
} while(true);
} }
static void VertexEdge(MeshType &m) static void VertexEdge(MeshType &m)