Browse Source

Fix array creation in the autoplacement tool

Fixes https://gitlab.com/kicad/code/kicad/issues/5424
pull/16/head
Ian McInerney 5 years ago
parent
commit
84fb024b9d
  1. 13
      pcbnew/autorouter/ar_matrix.cpp

13
pcbnew/autorouter/ar_matrix.cpp

@ -100,17 +100,17 @@ int AR_MATRIX::InitRoutingMatrix()
for( int jj = 0; jj < m_RoutingLayersCount; jj++ ) // m_RoutingLayersCount = 1 or 2 for( int jj = 0; jj < m_RoutingLayersCount; jj++ ) // m_RoutingLayersCount = 1 or 2
{ {
m_BoardSide[side] = nullptr; m_BoardSide[side] = nullptr;
m_DistSide[side] = nullptr;
m_DistSide[side] = nullptr;
// allocate matrix & initialize everything to empty // allocate matrix & initialize everything to empty
m_BoardSide[side] = (MATRIX_CELL*) operator new( ii * sizeof( MATRIX_CELL ) );
m_BoardSide[side] = new MATRIX_CELL[ ii * sizeof( MATRIX_CELL ) ];
memset( m_BoardSide[side], 0, ii * sizeof( MATRIX_CELL ) ); memset( m_BoardSide[side], 0, ii * sizeof( MATRIX_CELL ) );
if( m_BoardSide[side] == nullptr ) if( m_BoardSide[side] == nullptr )
return -1; return -1;
// allocate Distances // allocate Distances
m_DistSide[side] = (DIST_CELL*) operator new( ii * sizeof( DIST_CELL ) );
m_DistSide[side] = new DIST_CELL[ ii * sizeof( DIST_CELL ) ];
memset( m_DistSide[side], 0, ii * sizeof( DIST_CELL ) ); memset( m_DistSide[side], 0, ii * sizeof( DIST_CELL ) );
if( m_DistSide[side] == nullptr ) if( m_DistSide[side] == nullptr )
@ -119,8 +119,7 @@ int AR_MATRIX::InitRoutingMatrix()
side = AR_SIDE_TOP; side = AR_SIDE_TOP;
} }
m_MemSize =
m_RouteCount * ii * ( sizeof( MATRIX_CELL ) + sizeof( DIST_CELL ) + sizeof( char ) );
m_MemSize = m_RouteCount * ii * ( sizeof( MATRIX_CELL ) + sizeof( DIST_CELL ) );
return m_MemSize; return m_MemSize;
} }
@ -135,14 +134,14 @@ void AR_MATRIX::UnInitRoutingMatrix()
// de-allocate Distances matrix // de-allocate Distances matrix
if( m_DistSide[ii] ) if( m_DistSide[ii] )
{ {
delete m_DistSide[ii];
delete[] m_DistSide[ii];
m_DistSide[ii] = nullptr; m_DistSide[ii] = nullptr;
} }
// de-allocate cells matrix // de-allocate cells matrix
if( m_BoardSide[ii] ) if( m_BoardSide[ii] )
{ {
delete m_BoardSide[ii];
delete[] m_BoardSide[ii];
m_BoardSide[ii] = nullptr; m_BoardSide[ii] = nullptr;
} }
} }

Loading…
Cancel
Save