diff options
Diffstat (limited to 'decoder/source/etmv4/trc_etmv4_stack_elem.cpp')
-rw-r--r-- | decoder/source/etmv4/trc_etmv4_stack_elem.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/decoder/source/etmv4/trc_etmv4_stack_elem.cpp b/decoder/source/etmv4/trc_etmv4_stack_elem.cpp index a5d8894..be7221c 100644 --- a/decoder/source/etmv4/trc_etmv4_stack_elem.cpp +++ b/decoder/source/etmv4/trc_etmv4_stack_elem.cpp @@ -181,13 +181,18 @@ TrcStackElem *EtmV4P0Stack::from_front_next() void EtmV4P0Stack::erase_curr_from_front() { std::deque<TrcStackElem *>::iterator erase_iter; + erase_iter = m_iter; erase_iter--; - m_P0_stack.erase(erase_iter); + TrcStackElem* pElem = *erase_iter; + + // prevent overrun if we are erasing the last element + // - end() returned if no elements after the erased one. + m_iter = m_P0_stack.erase(erase_iter); // explicitly delete the item here as the caller can no longer reference it. // fixes memory leak from github issue #52 - delete *erase_iter; + delete pElem; } |