Почему включение FastMM вызывает ошибку EInvalidTypecast?

Это с Delphi XE2 и FastMM 4.99 и 32-битной программой на машине Win7-64.

Я пытался использовать FastMM, чтобы проверить небольшую программу, над которой я работал. Программа включает модуль данных, который находится в списке автоматически создаваемых форм проекта. Модуль данных содержит только объект TADOConnection.

Когда я включаю FullDebugMode в FastMM, при выходе из программы я получаю ошибку недопустимого приведения типа. Похоже, что виноват в освобождении модуля данных (ошибка возникает в TADOConnection.GetADODataSet). Кто-нибудь может подсказать, почему это происходит?


person wades    schedule 20.09.2012    source источник
comment
Очевидно, это происходит из-за того, что код пытается выполнить недопустимое приведение типа. Не имея возможности видеть код, довольно сложно быть более конкретным. Если вам нужна помощь, предоставьте соответствующие подробности.   -  person David Heffernan    schedule 20.09.2012
comment
Установите MadExcept, и вы хотя бы узнаете, ГДЕ происходит ошибка.   -  person Warren P    schedule 20.09.2012
comment
Добавление madExcept в ваше приложение ВСЕГДА - хорошая идея.   -  person David Heffernan    schedule 20.09.2012
comment
stackoverflow.com/questions/258727   -  person Arioch 'The    schedule 21.09.2012


Ответы (2)


Оказывается, проблема была в том, что было обнаружено FastMM, а не вызвано им.

В частности, я бы выделил TADOQuery подкласс для использования с модулем данных. Я не забыл написать переопределение деструктора для класса, но не смог вызвать унаследованный дтор. Вероятно, это заставляло TADOConnection делать что-то неопределенное.

person wades    schedule 20.09.2012
comment
Разве это не ПРЕДУПРЕЖДЕНИЕ КОМПИЛЯТОРА? :-) - person Warren P; 22.09.2012

Без дополнительной информации сложно сказать точно, но когда у вас возникают проблемы с освобождением чего-либо, обычно это происходит из-за того, что он пытается освободить что-то, что уже было освобождено. Попробуйте установить несколько точек останова, чтобы увидеть, освобождаются ли какие-либо из задействованных классов, прежде чем вы увидите эту ошибку. Если да, это должно помочь вам его отследить.

person Mason Wheeler    schedule 20.09.2012