pace std; #undef new // Глобал

Автор admin Пятница, 8 мая 2009 11:32

pace std; #undef new // Глобальные флаги, устанавливаемые макросами MemCheck.h bool traceFlag = true; bool activeFlag = false; namespace { // Тип записи в карте памяти struct Info { void* ptr; const char* file: long line; }: // Данные карты памяти const size_t MAXPTRS = lOOOOu: Info memMap[MAXPTRS]; size_t nptrs = 0; // Поиск адреса в карте int findPtr(void* p) { for (int i = 0; i < nptrs: ++i) if (memMap[i].ptr == p) return i; return -1; } void delPtr(void* p) { int pos = findPtr(p); assert(p >= 0): // Удаление указателя из карты for (size_t i = pos; i < nptrs-1: ++i) memMap[i] = memMap[i+l]; --nptrs: } // Фиктивный тип для статического деструктора struct Sentinel { -Sentinel О { if (nptrs > 0) { printf(“Leaked memory at:\n”): for (size_t i = 0: i < nptrs: ++i) pnntfCUXp (file: %s. line Sld)\n”. memMap[i].ptr. memMap[i].file. memMap[i].line): } else printfC’No user memory leaks!\n”): } }: // Статический фиктивный объект Sentinel s: } // Конец анонимного пространства имен // Перегрузка скалярной версии new void* operator new(size_t siz. const char* file, long line) { void* p = malloc(siz); if (activeFla


Комментарии закрыты.