Thats right that the problem is almost definately not where you think it is. I mean look at the definiton of new. void* __cdecl operator new(size_t nSize) { void* pResult; #ifdef _AFXDLL _PNH pfnNewHandler = _pfnUninitialized; #endif for (;;) { #if !defined(_AFX_NO_DEBUG_CRT) && defined(_DEBUG) pResult = _malloc_dbg(nSize, _NORMAL_BLOCK, NULL, 0); #else pResult = malloc(nSize); #endif if (pResult != NULL) return pResult; #ifdef _AFXDLL if (pfnNewHandler == _pfnUninitialized) { AFX_MODULE_THREAD_STATE* pState = AfxGetModuleThreadState(); pfnNewHandler = pState->m_pfnNewHandler; } if (pfnNewHandler == NULL || (*pfnNewHandler)(nSize) == 0) break; #else if (_afxNewHandler == NULL || (*_afxNewHandler)(nSize) == 0) break; #endif } return pResult; } Look at the for(;;) It should not fail. You have corrupted the heap. Get MMGR from http://www.fluidstudios.com/publications.html . It is an excellent class. Ensure that you carefully read the instructions [ especially the order of includes]. Use it on Debug and Release builds. Check that you have not used new and free or similar. Check for resource leaks. Regards, axe