diff --git a/c-syncedit.cc b/c-syncedit.cc index 2e3ed23..8e80e96 100644 --- a/c-syncedit.cc +++ b/c-syncedit.cc @@ -328,10 +328,11 @@ void SyncEditor::DeleteSegment( auto& undo{ dynamic_cast< T_UndoSyncChanges& >( Common::Undo( ).add< T_UndoSyncChanges >( ) ) }; + T_AutoArray< T_String , 8 > dcNames; // Curves to delete for ( auto i = 0u ; i < nc ; i ++ ) { if ( curves[ i ]->segments.size( ) == 1 ) { undo.curveDeletion( *curves[ i ] ); - sync.removeCurve( curves[ i ]->name ); + dcNames.add( curves[ i ]->name ); } else { auto nCurve{ *curves[ i ] }; nCurve.segments.remove( segmentIndex ); @@ -339,6 +340,13 @@ void SyncEditor::DeleteSegment( sync.setCurve( std::move( nCurve ) ); } } + + // We delete curves that need to be deleted now, in order to avoid + // using dangling curve pointers in the loop above + const auto nd{ dcNames.size( ) }; + for ( auto i = 0u ; i < nd ; i ++ ) { + sync.removeCurve( dcNames[ i ] ); + } } /*----------------------------------------------------------------------------*/