I found a bug at application exit time and fixed it. When I fixed it, the problem noted in this thread went away. Here's what it was: bad: CArray my_array; CMyClass* ptr = new CMyClass; my_array.SetAt(index, *ptr); ...later... delete &(my_array.GetAt(index)); good: CArray my_array; CMyClass* ptr = new CMyClass; my_array.SetAt(index, ptr); ... later.... delete my_array.GetAt(index);