我正在尝试在包含几何数据的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 :(得分:2)
请记住,STL容器会将您放入其中的对象的副本。 (参见Scott Meyers的“Effective STL”,第3项。)
如果您的对象没有正确实现复制,那么当您将它们放入容器时,最多会出现分段错误,最坏的情况则是细微的错误。 (正如迈耶斯所说,“复制,复制出来。这就是STL方式。”)
由于你的对象似乎暗示动态分配在某个地方进行,我猜想你的某个类的拷贝构造函数,赋值运算符或析构函数没有正确实现。
答案 1 :(得分:0)
根据您对复制构造函数和赋值运算符的实现,可能会多次删除边*e1, *e2, *e3
。
我们能否看到要确认的实施?