2011-11-10 11 views
0

幾何データを含むC++でリストを作成しようとしています。リストは、三角形のリストである:しかしオブジェクトをリストに挿入する、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のスタックトレースが役に立ちます。 – anio

+0

あなたのctorはどのように見えますか? –

+5

デフォルトコンストラクタとコピーコンストラクタの定義と、代入演算子(間違った署名がある)を表示します。 –

答えて

0

コピーコンストラクタと代入演算子の実装によっては、エッジ*e1, *e2, *e3が複数回削除されている可能性があります。

確認する実装を確認できますか?

2

STLコンテナは、コピーしたオブジェクトのをコピーします。

オブジェクトに適切なコピーが実装されていないと、せいぜいセグメンテーションフォールトが発生し、コンテナに入れたときの最悪の場合は微妙なバグが発生します。 (メイアーズは「コピーイン、コピーアウト、それはSTLの方法です」)

あなたのオブジェクトは、動的割り当てがどこかで行われることを暗示しているように見えるので、コピーコンストラクタ、代入演算子、またはデストラクタがクラスの1つが適切に実装されていません。

関連する問題