Мы отлаживали странный случай уже несколько дней и несколько изолировали ошибку, но она все еще не имеет никакого смысла. Возможно, кто-нибудь здесь может дать мне подсказку о том, что происходит.
Проблема заключается в нарушении прав доступа в части кода.
В основном у нас есть что-то вроде этого:
void aclass::somefunc() {
try {
erroneous_member_function(*someptr);
}
catch (AnException) {
}
}
void aclass::erroneous_member_function(const SomeObject& ref) {
// { //<--scope here error goes away
LargeObject obj = Singleton()->Object.someLargeObj; //<-remove this error goes away
//DummyDestruct dummy1//<-- this is not destroyed before the unreachable
throw AnException();
// } //<--end scope here error goes away
UnreachableClass unreachable; //<- remove this, and the error goes away
DummyDestruct dummy2; //<- destructor of this object is called!
}
Находясь в отладчике, он выглядит так, как будто он разрушает UnreachableClass, и когда я вставляю объект DummyDestruct, он не уничтожается до вызова странного деструктора. Так что не похоже, что разрушение LargeObject идет не так, как надо.
Все это находится в середине производственного кода, и его очень трудно выделить для небольшого примера.
Мой вопрос: кто-нибудь имеет представление о том, что вызывает это и что происходит? У меня есть достаточно полнофункциональный отладчик (Embarcadero RAD studio), но сейчас я не уверен, что с ним делать.
Может кто-нибудь дать мне совет, как поступить?
Обновление:
Я поместил объект DummyDestruct под предложением throw и установил точку останова в деструкторе. Введен деструктор для этого объекта (и только он находится в этом фрагменте кода).