Salome HOME
During remove node from STL map, please take about iterator. Problem noticed under...
authorptv <ptv@opencascade.com>
Mon, 3 Jul 2006 07:47:19 +0000 (07:47 +0000)
committerptv <ptv@opencascade.com>
Mon, 3 Jul 2006 07:47:19 +0000 (07:47 +0000)
src/SMDS/SMDS_VolumeTool.cxx

index 7ee1f81f206e0ebc18ee290fdab2c2241885fd0b..66185f0bffe0e1cf44382193549c326cb248770b 100644 (file)
@@ -1266,17 +1266,22 @@ bool SMDS_VolumeTool::IsFreeFace( int faceIndex )
   if ( IsFaceExternal( faceIndex ))
     intNormal = XYZ( -intNormal.x, -intNormal.y, -intNormal.z );
   XYZ p0 ( nodes[0] ), baryCenter;
-  for ( vNbIt = volNbShared.begin(); vNbIt != volNbShared.end(); vNbIt++ ) {
+  for ( vNbIt = volNbShared.begin(); vNbIt != volNbShared.end(); ) {
     int nbShared = (*vNbIt).second;
     if ( nbShared >= 3 ) {
       SMDS_VolumeTool volume( (*vNbIt).first );
       volume.GetBaryCenter( baryCenter.x, baryCenter.y, baryCenter.z );
       XYZ intNormal2( baryCenter - p0 );
       if ( intNormal.Dot( intNormal2 ) < 0 )
+      {
+        vNbIt++;
         continue; // opposite side
+      }
     }
     // remove a volume from volNbShared map
-    volNbShared.erase( vNbIt );
+    TElemIntMap::iterator vErIt = vNbIt;
+    vNbIt++;
+    volNbShared.erase( vErIt );
   }
 
   // here volNbShared contains only volumes laying on the