Сам засомневался, но
...
var
fObject: TObject;
i: integer;
begin
for i := 0 to 10000 do fObject.Free;
...
стабильно выдает AV...
насчет "черного ящика" - тогда имхо либо надеятся что он вернет nil, если не сможет создать объект, либо само удаление засунуть в try/except, на мой взгляд криво, но другого пути не вижу
да, и вызывать не dq.Destroy, dq.Free...
с уважением...