저는 PyQt4를 사용하여 진화 시뮬레이터 응용 프로그램을 작성하고 있습니다. QGraphics 장면에는 '생물'과 '초목'이 있습니다. 생물들은 먹을 때 수축하는 식물을 먹고 특정 크기로 내려 가면 죽어서 장면에서 삭제됩니다. 굶어 죽은 생물도 죽을 때 삭제됩니다.장면에서 QGraphicsItem을 삭제하는 중 세그먼트 오류가 발생했습니다.
문제는 내가 장면에서 초목을 삭제할 때 세분화 오류가 발생한다는 것입니다 (즉각적이지 않고 시간이 많이 걸립니다). 이것은 생물들에게는 일어나지 않았는데, 식물을 추가 할 때만, 개념적으로는 생물들 (클래스 인스턴스들)과 동일하지만. 나는 항목을 삭제
특정 루프는 다음과 같이 (코드 주석으로 대체 코드의 상당한 양의 단순화)입니다 :
dead = set()
items = self.scene.items()
for item in items:
if isinstance(item, Creature):
# Do some calculation to specify what creature does
for item1 in self.scene.items():
# Look through other items on scene and define interactions
if isinstance(item1, Creature):
# Specify what to do if current item is being compared to another creature
if isinstance(item1, Vegetation):
# Specify what to do if current item is being compared to vegetation
# If creature dies, add to dead set
dead.add(item)
elif isinstance(item, Vegetation):
# Do same as for creature (see above)
# If vegetation dies, add to dead set
dead.add(item)
# Get rid of all dead items from scene
while dead:
deadItem = dead.pop()
self.scene.removeItem(deadItem)
del deadItem
그때하여 self.scene.removeItem 라인을 주석 경우 프로그램이 중단되지 않습니다.
프로그램이 더 이상 유효하지 않은 메모리 주소를 호출하는 것으로 보이지만 그 원인을 알 수 없습니다.
전체 응용 프로그램이 상당히 길기 때문에 여기에 설명하지 않은 이유가 있지만 필요한 경우 추가 할 수 있습니다.
저는 Windows에서 PyQt4를 사용하여 Python 3.4.3을 실행하고 있습니다.
항목을 반복하면서 항목을 삭제하는 것은 좋지 않은 것처럼 보입니다. 아니면 들여 쓰기가 잘못 되었습니까? – ekhumoro
당신이 말하는 것을 봅니다. 나는 그것을 움직이려 고 노력 했으므로 'for item for items'루프 밖에 있지만 프로그램은 여전히 충돌합니다. –
게시 된 코드에서 들여 쓰기가 잘못되었다고 생각합니다. – strubbly