void CMemLeakDetect::redoMemoryTrace(void* addr, void* oldaddr, size_t asize, TCHAR *fname, DWORD lnum) { AllocBlockInfo ainfo; if (m_AllocatedMemoryList.Lookup(oldaddr,(AllocBlockInfo &) ainfo)) { m_AllocatedMemoryList.RemoveKey(oldaddr); } else { AfxTrace(_T("ERROR!CMemLeakDetect::redoMemoryTrace() didnt find Address(0x%08X) to free\n"), oldaddr); } // ainfo.address = addr; ainfo.lineNumber = lnum; ainfo.size = asize; ainfo.occurance = memoccurance++; MLD_STACKWALKER(&ainfo.traceinfo[0]); // if (fname) _tcsncpy_s(&ainfo.fileName[0], MLD_MAX_NAME_LENGTH, fname, MLD_MAX_NAME_LENGTH); else ainfo.fileName[0] = 0; m_AllocatedMemoryList.SetAt(addr, ainfo); };
void CMemLeakDetect::addMemoryTrace(void* addr, size_t asize, TCHAR *fname, DWORD lnum) { AllocBlockInfo ainfo; // if (m_AllocatedMemoryList.Lookup(addr, ainfo)) { // already allocated AfxTrace(_T("ERROR!CMemLeakDetect::addMemoryTrace() Address(0x%p) already allocated\n"), addr); return; } // ainfo.address = addr; ainfo.lineNumber = lnum; ainfo.size = asize; ainfo.occurance = memoccurance++; MLD_STACKWALKER(&ainfo.traceinfo[0]); // if (fname) _tcsncpy_s(&ainfo.fileName[0], MLD_MAX_NAME_LENGTH, fname, MLD_MAX_NAME_LENGTH); else ainfo.fileName[0] = 0; // m_AllocatedMemoryList.SetAt(addr, ainfo); };
void CallStack::capture() { MLD_STACKWALKER(&traceinfo[0]); }