Как определить, какой деструктор называется

У меня есть функция a (), которая вызывает другую функцию b (), в которой вектор объектов определенного класса размещается в куче, и возвращается его указатель. Теперь при выходе из func a () моей программы. сбой с ошибкой повреждения кучи. Отладчик показывает, что он завис в свободном функционале. Как я могу узнать деструктор, какой объект был назван ??

Используя отладчик, я вижу, что void __cdecl _free_base (void * pBlock) вызывается и значение pblock равно 0x00000000646ec420 класса std :: basic_ostream< char, struct std :: char_traits> std :: cout void *

Что это значит

-2

Решение

От MSDN :

Когда объект выходит из области видимости или удаляется, последовательность событий при его полном уничтожении выглядит следующим образом:

Вызывается деструктор класса, и выполняется тело функции деструктора.

Деструкторы для нестатических объектов-членов вызываются в обратном порядке, в котором они появляются в объявлении класса. Необязательный список инициализации элементов, используемый при построении этих элементов, не влияет на порядок (создание или) уничтожение. (Для получения дополнительной информации об инициализации членов см. Инициализация баз и участников.)

Деструкторы для невиртуальных базовых классов вызываются в обратном порядке объявления.

Деструкторы для виртуальных базовых классов вызываются в обратном порядке объявления.

Попробуйте добавить несколько точек останова, чтобы увидеть, какой деструктор вызывает ошибку повреждения кучи.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]