X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/01871bf642aa91f0150285fa71e18151721de8e0..ba49d2acf95d53517719c4fd9ac2ad5aaa13540b:/src/common/dynarray.cpp?ds=sidebyside diff --git a/src/common/dynarray.cpp b/src/common/dynarray.cpp index 86a106d556..0f556decb5 100644 --- a/src/common/dynarray.cpp +++ b/src/common/dynarray.cpp @@ -158,13 +158,13 @@ void name::Grow(size_t nIncrement) \ if( (m_nCount == m_nSize) || ((m_nSize - m_nCount) < nIncrement) ) { \ if( m_nSize == 0 ) { \ /* was empty, determine initial size */ \ - size_t size = WX_ARRAY_DEFAULT_INITIAL_SIZE; \ - if (size < nIncrement) size = nIncrement; \ + size_t sz = WX_ARRAY_DEFAULT_INITIAL_SIZE; \ + if (sz < nIncrement) sz = nIncrement; \ /* allocate some memory */ \ - m_pItems = new T[size]; \ + m_pItems = new T[sz]; \ /* only grow if allocation succeeded */ \ if ( m_pItems ) { \ - m_nSize = size; \ + m_nSize = sz; \ } \ } \ else \ @@ -358,6 +358,9 @@ void name::insert(iterator it, const_iterator first, const_iterator last) \ return; \ Grow(nInsert); \ \ + /* old iterator could have been invalidated by Grow(). */ \ + it = begin() + nIndex; \ + \ memmove(&m_pItems[nIndex + nInsert], &m_pItems[nIndex], \ (m_nCount - nIndex)*sizeof(T)); \ for (size_t i = 0; i < nInsert; ++i, ++it, ++first) \