Этот вопрос важен!Я видел, что Visual Studio 2017 изменил значение указателя после «удаления».Это вызвало проблему, потому что я использовал инструмент трассировки памяти.Инструмент собирал указатели после каждого оператора «new» и проверял их после «delete».Псевдокод:
Data* New(const size_t count)
{
Data* const ptr(new Data[count]);
#ifdef TEST_MODE
MemoryDebug.CollectPointer(ptr);
#endif
return ptr;
}
void Delete(Data* const ptr)
{
delete[] ptr;
#ifdef TEST_MODE
MemoryDebug.CheckPointer(ptr);
#endif
}
Этот код хорошо работает в Visual Studio 2008, но не работает в Visual Studio 2017, поэтому я изменил порядок операций во второй функции.
Однако вопрос хороши проблема существует.Об этом должны знать опытные инженеры.