2011-11-10 4 views
0

기하학적 데이터가 포함 된 C++ 목록을 만들려고합니다. 나는 삼각형의 목록을 만들려고 할 때목록에 개체 삽입

class Triangle 
{ 
public: 
Triangle(Point P1, Point P2, Point P3); 
Triangle(const Triangle& T); 
~Triangle() {delete e1; delete e2; delete e3;} 



const Triangle operator=(const Triangle & T); 

bool InCircle(Point & P); 
int TriNumber() { return TriangleNumber;} 
void SetTriNumber(int trinum) { TriangleNumber = trinum;} 
Edge ReturnEdge(int i); 
Point ReturnPoint(int i); 





protected: 
Point p1,p2,p3; 
Edge *e1, *e2, *e3; 
int TriangleNumber;    
}; 

그러나, 나는 다음과 같은 라인을 사용 세그먼트 오류를 ​​얻을 : 어떤 도움을 주시면 더 좋구요

const Point p1(100.0, 100.0); 
const Point p2(-100.0, 100.0); 
const Point p3(0.0, -150.0); 



Triangle TT(p1,p2,p3); 

list<Triangle> trilist; 
list<Triangle>::iterator iter; 
iter = trilist.begin(); 
// the next line is causing all the problems: 
trilist.insert(iter, TT); 

목록은 삼각형의 목록입니다.

+0

정확한 오류는 무엇입니까? gdb에서 stacktrace 도움이 될 것입니다. – anio

+0

귀하의 고객은 어떻게 생겼습니까? –

+5

할당 연산자뿐만 아니라 기본 생성자 및 복사 생성자의 정의를 표시합니다 (그런데 잘못된 서명이 있음). –

답변

0

복사 생성자 및 할당 연산자의 구현에 따라 가장자리 *e1, *e2, *e3이 두 번 이상 삭제 될 수 있습니다.

확인할 사항을 확인할 수 있습니까?

2

STL 컨테이너는 복사본에 넣은 개체을 만듭니다.

개체에 올바르게 복사 기능이 구현되어 있지 않은 경우 컨테이너에 넣을 때 세그멘테이션 오류가 발생하고 최악의 경우에는 미묘한 버그가 발생합니다. (마이어스 (Meyers)는 "복사하여 복사하면 STL 방식입니다.")

개체에 동적 할당이 어딘가에 있다는 것을 암시하는 것처럼 보이기 때문에 복사 생성자, 할당 연산자 또는 소멸자가 귀하의 클래스 중 하나가 제대로 구현되지 않았습니다.