Purify Errors confirmed in RW 6.0.1 with test model: bug5002b-601.mdl 01-04-2011. See also trace file. After having deleted an Account from the Workspace (one which is in a Display Group and has a Supply), Purify detects two errors upon exit: [E] IPR: Invalid pointer read in Account::getSimObj(void)const {1 occurrence} [E] IPR: Invalid pointer read in Account::getSimObj(void)const {1 occurrence} These two errors are both due to calling into a deleted Account, while, respectively, deleting callbacks for an Account Group and a Supply Group. ... summaries and details follow. ========================================================================= [E] IPR: Invalid pointer read in Account::getSimObj(void)const {1 occurrence} Reading 4 bytes from 0x1602304c (4 bytes at 0x1602304c illegal) Address 0x1602304c points into a committed region of virtual memory Thread ID: 0x3b8 ERROR LOCATION Account::getSimObj(void)const [c:\riverware\staff\philw\pwworkrel\accounting\account.hpp:808] CallbackReceiver::_helpAccountCallbacks(CallbackType,bool,RootSelection const*) [c:\riverware\staff\philw\pwworkrel\sim\callbackreceiver.cpp:452] CallbackReceiver::_removeAccountCallbacks(CallbackType,RootSelection const*) [c:\riverware\staff\philw\pwworkrel\sim\callbackreceiver.cpp:481] AccountGroup::_removeCallbacks(void) [c:\riverware\staff\philw\pwworkrel\sim\accountgroup.cpp:164] AccountGroup::~AccountGroup(void) [c:\riverware\staff\philw\pwworkrel\sim\accountgroup.cpp:169] AccountGroup::`scalar deleting destructor'(UINT) [C:\RiverWare\staff\philw\pwWorkRel\EngrObjs\Debug\riverware.exe] RootGroupMgr::clearGroups(void) [c:\riverware\staff\philw\pwworkrel\sim\rootgroupmgr.cpp:726] SimWorkspace::clear(bool) [c:\riverware\staff\philw\pwworkrel\sim\simws.cpp:571] exitOK [c:\riverware\staff\philw\pwworkrel\gui\exitrwgui.cpp:106] exitRWCmdFunction(void) [c:\riverware\staff\philw\pwworkrel\gui\exitrwgui.cpp:179] ========================================================================= [E] IPR: Invalid pointer read in Account::getSimObj(void)const {1 occurrence} Reading 4 bytes from 0x1602304c (4 bytes at 0x1602304c illegal) Address 0x1602304c points into a committed region of virtual memory Thread ID: 0x3b8 ERROR LOCATION Account::getSimObj(void)const [c:\riverware\staff\philw\pwworkrel\accounting\account.hpp:808] CallbackReceiver::_helpAccountCallbacks(CallbackType,bool,RootSelection const*) [c:\riverware\staff\philw\pwworkrel\sim\callbackreceiver.cpp:452] CallbackReceiver::_removeAccountCallbacks(CallbackType,RootSelection const*) [c:\riverware\staff\philw\pwworkrel\sim\callbackreceiver.cpp:481] SupplyGroup::_removeCallbacks(void) [c:\riverware\staff\philw\pwworkrel\sim\supplygroup.cpp:182] SupplyGroup::~SupplyGroup(void) [c:\riverware\staff\philw\pwworkrel\sim\supplygroup.cpp:191] SupplyGroup::`scalar deleting destructor'(UINT) [C:\RiverWare\staff\philw\pwWorkRel\EngrObjs\Debug\riverware.exe] RootGroupMgr::clearGroups(void) [c:\riverware\staff\philw\pwworkrel\sim\rootgroupmgr.cpp:750] SimWorkspace::clear(bool) [c:\riverware\staff\philw\pwworkrel\sim\simws.cpp:571] exitOK [c:\riverware\staff\philw\pwworkrel\gui\exitrwgui.cpp:106] exitRWCmdFunction(void) [c:\riverware\staff\philw\pwworkrel\gui\exitrwgui.cpp:179] ================================================= [E] IPR: Invalid pointer read in Account::getSimObj(void)const {1 occurrence} Reading 4 bytes from 0x1602304c (4 bytes at 0x1602304c illegal) Address 0x1602304c points into a committed region of virtual memory Thread ID: 0x3b8 ERROR LOCATION Account::getSimObj(void)const [c:\riverware\staff\philw\pwworkrel\accounting\account.hpp:808] inline SimObj *Account::getSimObj() const { => return _simobj; } // set and return the account name -------------------------------- CallbackReceiver::_helpAccountCallbacks(CallbackType,bool,RootSelection const*) [c:\riverware\staff\philw\pwworkrel\sim\callbackreceiver.cpp:452] // Put the SIMOBJ_ACCOUNT_DELETED callback on the // containing simobj. But don't do any duplicates. => SimObj *container = account->getSimObj(); std::cout << mname << " [#" << iterCnt << "]" << " " << (add ? "ADD" : "DEL") -------------------------------- CallbackReceiver::_removeAccountCallbacks(CallbackType,RootSelection const*) [c:\riverware\staff\philw\pwworkrel\sim\callbackreceiver.cpp:481] void CallbackReceiver::_removeAccountCallbacks(CallbackType t, const RootSelection *slx) { => _helpAccountCallbacks(t, false, slx); } void CallbackReceiver::_helpSupplyCallbacks(CallbackType t, -------------------------------- AccountGroup::_removeCallbacks(void) [c:\riverware\staff\philw\pwworkrel\sim\accountgroup.cpp:164] recomputeSelections(false); // false-->don't update the callbacks as // that would put us into an infinite loop CallbackReceiver::_removeSimObjCallbacks(WS_OBJECT_REMOVED, selection1()); => CallbackReceiver::_removeAccountCallbacks(SIMOBJ_ACCOUNT_DELETED, selection1()); } AccountGroup::~AccountGroup() -------------------------------- AccountGroup::~AccountGroup(void) [c:\riverware\staff\philw\pwworkrel\sim\accountgroup.cpp:169] AccountGroup::~AccountGroup() { => _removeCallbacks(); } const cwSlist & AccountGroup::resolve(bool force) AccountGroup::`scalar deleting destructor'(UINT) [C:\RiverWare\staff\philw\pwWorkRel\EngrObjs\Debug\riverware.exe] -------------------------------- RootGroupMgr::clearGroups(void) [c:\riverware\staff\philw\pwworkrel\sim\rootgroupmgr.cpp:726] list.replace(it,NULL); g->unresolve(); // delete the group. => delete g; } list.clear(); } -------------------------------- SimWorkspace::clear(bool) [c:\riverware\staff\philw\pwworkrel\sim\simws.cpp:571] POST(WSID_MGMT)(WSID_MGMT, MSG_WS_CLEAR ); callbackReceiverMgr.setClearingWS(true); => RootGroupMgr::Instance()->clearGroups(); rwSystem->callCallbacks(WS_CLEARING); -------------------------------- exitOK [c:\riverware\staff\philw\pwworkrel\gui\exitrwgui.cpp:106] // EXITCRASH - BRIAN #if 1 => rwWorkspace->clear(); qApp->processEvents(); #endif -------------------------------- exitRWCmdFunction(void) [c:\riverware\staff\philw\pwworkrel\gui\exitrwgui.cpp:179] void exitRWCmdFunction() { => exitOK(); } =========================================================================