GLScene 컨테이너의 모든 장면 개체를 삭제하려고하는데 다음 코드 조각을 사용하여 작업을 수행하지만 일부 알 수없는 이유로 인해 충돌이 발생하면 충돌을 일으켜 세분화 오류가 발생합니다. 목적.GLScene에서 새 장면로드
줄 단위로 디버깅을 시도했는데 어떤 식 으로든 컨테이너 클래스 Glscene1.Objects[i]
에 '# 2'클래스 이름을 가진 설명 할 수없는 클래스가 포함되어 있음이 드러났습니다. Free 메소드를 호출하는 것과 동일한 코드 스 니펫을 실행하려고 시도했지만 아무런 이상이 발생하지 않고 객체가 삭제되지 않지만 객체 클래스 이름에 일관성이 있습니다.
for i := 0 to GLScene1.Objects.Count - 1 do
begin
if (not GLScene1.Objects[i].ClassNameIs('TGLCamera')) and
(not GLScene1.Objects[i].ClassNameIs('TGLLightSource')) and
(not GLScene1.Objects[i].ClassNameIs('TGLDummyCube')) and
(not GLScene1.Objects[i].ClassNameIs('TGLXYZGrid')) and
(not GLScene1.Objects[i].ClassNameIs('TGLSceneRootObject')) then
begin
// if GLScene1.Objects[i].Count > 0 then
// GLScene1.Objects[i].DeleteChildren;
GLScene1.Objects.Remove(GLScene1.Objects[i],false);
if GLScene1.Objects[i] <> nil then // I comment out these lines
GLScene1.Objects[i].free; // I comment out these lines
end;
end;
안녕하세요. Sonya. for, 즉 i : = GlScene1.Objects.Count-1 downto 0 do ...을 반대로하는 것이 좋습니다. 그렇지 않으면 삭제하려는 개체 인덱스가 이미 범위를 벗어 났을 수 있습니다. –
Google 직원의 경우 다운 카운팅은 장면의 오브젝트를 지우는 데 좋은 전략이지만 의도 한 클래스 유형을 제외하는 대신 의도 한 클래스 유형 만 지우려고 시도합니다. GLFreeForm, GLLines 등등. 알 수없는 몇 가지 이유로 GLScene 루트 개체 컨테이너 클래스에 일부 참조 또는 차단 개체가있는 모든 이들도 삭제, 이것은 임시적으로 배웠습니다. –