У меня есть функция a (), которая вызывает другую функцию b (), в которой вектор объектов определенного класса размещается в куче, и возвращается его указатель. Теперь при выходе из func a () моей программы. сбой с ошибкой повреждения кучи. Отладчик показывает, что он завис в свободном функционале. Как я могу узнать деструктор, какой объект был назван ??
Используя отладчик, я вижу, что void __cdecl _free_base (void * pBlock) вызывается и значение pblock равно 0x00000000646ec420 класса std :: basic_ostream< char, struct std :: char_traits> std :: cout void *
Что это значит
От MSDN :
Когда объект выходит из области видимости или удаляется, последовательность событий при его полном уничтожении выглядит следующим образом:
Вызывается деструктор класса, и выполняется тело функции деструктора.
Деструкторы для нестатических объектов-членов вызываются в обратном порядке, в котором они появляются в объявлении класса. Необязательный список инициализации элементов, используемый при построении этих элементов, не влияет на порядок (создание или) уничтожение. (Для получения дополнительной информации об инициализации членов см. Инициализация баз и участников.)
Деструкторы для невиртуальных базовых классов вызываются в обратном порядке объявления.
Деструкторы для виртуальных базовых классов вызываются в обратном порядке объявления.
Попробуйте добавить несколько точек останова, чтобы увидеть, какой деструктор вызывает ошибку повреждения кучи.
Других решений пока нет …