Я ищу стратегию отладки памяти в C++. Я написал приложение, использующее QT. Я использую Windows 7. Используемый компилятор - MinGW. В режиме отладки, я иногда получаю следующее сообщение отладки: КУЧИ КОРРУПЦИИ ОБНАРУЖЕН: после того, как нормальный блок (# ...) в 0x ...Стратегия отладки памяти
Я думаю, происходит следующее: Блок памяти освобождаются с помощью удаления , После этого используется память.
В большинстве случаев это будет работать без проблем. Но иногда это приводит к сбою приложения. Мой вопрос в том, как отладить эту ошибку? Я думаю о замене оператора 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);
}
В этом случае, когда память повторно после удаления, программа немедленно рухнет. Это хорошая стратегия, или у вас есть лучший вариант?
Возможный дубликат [Как отлаживать ошибки кучи коррупции?] (Http://stackoverflow.com/questions/1010106/how-to-debug-heap-corruption-errors) – user1641854