일부 개체를 저장하는 TList가 있습니다. 지금은 그 목록에 몇 가지 작업을 수행하는 기능이 있습니다 ... 정말 이상한 어떤 적절한 인덱스 fMgr.Windows에 액세스하는 EListError이 발생한다는 것입니다 무엇인지 지금이상한 EListError 발생 (변수 정의 인덱스에 액세스 할 때)
function SomeFunct(const AIndex: integer): IInterface
begin
if (AIndex > -1) and (AIndex < fMgr.Windows.Count) then
begin
if (fMgr.Windows[AIndex] <> nil) then
begin
if not Supports(TForm(fMgr.Windows[AIndex]), IMyFormInterface, result) then
result:= nil;
end;
end
else
result:= nil;
end;
을, 그러나 내가 하드 코딩을하는 경우 (예를 들어, AIndex를 값 0 또는 1로 바꿉니다) 잘 작동합니다. 디버깅을 시도했지만, 함수는 인수 0과 1 (가정)을 사용하여 두 번 호출됩니다.
AIndex = 0 동안, fMgr.Windws을 평가하는 동안, $ someAddress에서 EListError에서 fMgr.Windows [AIndex] 결과를 평가 [0] 대신 - 반환 적절한 결과 ... 더 이상, 심지어 어떤
EListError가 있지만이 함수는 적절한 데이터를 반환하고 아무 것도 표시하지 않습니다. 종료시 두 개의 EListError 메모리 누수에 대한 정보 (FastMM 사용)
잘못된 정보가 있습니까?! 사전 마이클
예외가 발생합니까? 종료시 두 개의 메모리 누수 메시지를 기반으로합니까? Throw되는 예외가 문제인지 메모리 누수인지 명확히 할 수 있습니까? 왜냐하면 나는 예외가 발생했는지 의심하기 때문이다. –
그래서 fMgr.Windows가 TList입니까? 실제 TList 또는 TInterfaceList 또는 일반 목록입니까? –
이것은 TForms (실제로 TForm을 기반으로하는 사용자 정의 클래스 중 일부는 주어진 인터페이스를 구현하는)의 목록을 저장하는 TList입니다. Delphi7이므로 제네릭은 불가능합니다.) FastMM이 누수를보고하면 오류가 발생하지 않지만 분명히 만들어져 야합니다. 누설이있는 경우 오류가 발생하지 않습니다. 또한 변수 감시는이 표현식을 오류로 평가합니다. – migajek