내 프로그램에서 점을 반복하여 화면에 무언가를 그려야하는 vector<Points*> points;
(모두 고유 한 Points
인 size: 6
)이있었습니다. 그러나 새로운 요구 사항에 따라 벡터의 길이를 size: 14
으로 늘려야합니다. 추가 할 수 있었다포인터의 이중 삭제 방지
새로운 항목은 이전 6
Points
에서 일했다, 그래서 대신 새로운 메모리를 할당, 나는 다음과 같이 바로 이전 포인터를 사용하여 생각 :의 소멸자에서
while (currentSize < 14){
int rndPoint = getRandomPoint(0, 5); //random index to choose from the vector
points->push_back(points[randPoint]);
}
을 내가 특별히 할 때 (루프에서 액세스 위반 오류를 받고 있어요 - 내가 프로그램을 종료하려고 할 때, 그러나
for(int i=0;i<points.size(); ++i){
if(points[i] != NULL){
delete (points[i]);
}
}
: 나는 메모리 할당을 해제했습니다 때 클래스는, 나는 다음과 같은 일을 해요 i
색인 6
에 도달). delete
을 사용하여 6 개의 고유 점을 이미 삭제 한 경우 if (points[i] != NULL)
인 이유는 i=6,7...13
인 경우 true
이되는 이유는 무엇입니까?
'delete '뒤에'points [i] = NULL;'을 설정하면 자동으로 실행되지 않습니다. 또한 수업이 [규칙 3] (http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three)을 준수하는지 확인하십시오. –
@ πάνταῥεῖ 그건 질문에 관한 것이 아닙니다. –
@ πάνταῥεῖ 그것은 충분하지 않습니다. 'points [] '요소 중 일부는 이전 요소와 동일하고, ergo double delete입니다. –