Я ищу стратегию отладки памяти на С++. Я написал приложение, используя QT. Я использую Windows 7. Используемый компилятор - MinGW. В режиме отладки я иногда получал следующее отладочное сообщение: ОБНАРУЖЕНО ПОВРЕЖДЕНИЕ КУЧИ: после нормального блока (#...) в 0x...
Я предполагаю, что происходит следующее: Блок памяти освобождается с помощью удаления. После этого память используется.
В большинстве случаев это будет работать без проблем. Но иногда это приводит к сбою приложения. Мой вопрос в том, как отладить эту ошибку? Думаю о замене оператора new/delete.
Рассмотрим следующий оператор new/delete:
struct MemHandle
{
void* ptr;
size_t size;
}
void * operator new(std::size_t n) throw(std::bad_alloc)
{
MemHandle Mem;
void* p = malloc(n);
Mem.ptr = p;
Mem.size = n;
//TODO: Store Mem
}
void operator delete(void * p) throw()
{
MemHandle Mem = GetMemHandle(p);
memset(p, 0, Mem.size);
free(p);
}
В этом случае при повторном использовании памяти после удаления программа сразу вылетает. Это хорошая стратегия, или у вас есть вариант получше?