insert(std :: map <int,struct>)分段错误(核心转储)

时间:2015-10-17 20:37:58

标签: c++ struct std

我的C ++代码的一个简单部分出了问题,问题是:我有一个非常大的程序运行一些SLAM的东西(一切都很完美),但我似乎看不出有什么问题。我的代码的一小部分。我有一个名为polygon的结构,它由一个点数组(这是一个不同的结构)和数组中的点数组成。

struct point
{
    float x;
    float y;
    float z;
    point(float X, float Y, float Z) {x=X; y=Y; z=Z;};
    point() {x=0; y=0; z=0;};
};

struct ray
{
    point R1;
    point R2;
    ray(point r1,point r2) {R1=r1; R2=r2;};
    ray(){R1=point(); R2=point();};
};

struct polygon
{
    point P[];
    int count=0;
    polygon(){};
};

当我运行以下代码时,我遇到了分段错误,编译时没有错误。你觉得它可能是什么?是不是我没有正确定义地图value_type?我只花了几个小时试图修复这个没有成功。感谢您

polygon psdfs;
*psdfs.P = *new point[4];
psdfs.P[0] = point(100,0,100);
psdfs.P[1] = point(-100,0,100);
psdfs.P[2] = point(-100,0,-100);
psdfs.P[3] = point(100,0,-100);
psdfs.count = 4;
polygons->insert(pair<int, polygon>(0,psdfs));

polygons

std::map<int, polygon > * polygons;

1 个答案:

答案 0 :(得分:0)

point P[]并不能按照您的想法行事。我不完全确定它在这种情况下是否有效,但如果是,则它与point * P相同。

所以最好你有一个需要用某些东西初始化的指针。

您可能认为*psdfs.P = *new point[4]会这样做,但事实并非如此。这也是无效的,但是如果它是从数组到数组的值/副本分配......但是你没有数组,你有一个指向谁知道什么的指针。 / p>

你真正想要的是psdfs.P = new point[4]

现在所有这些只涉及技术,使其成为代码的工作方面。另一个问题是你的课程设计非常糟糕。你不应该进入这样的类并操纵它们,尤其是初始化数组 - 这应该在构造函数中完成。

我建议使用std::vector而不是使用new []进行分配。我会将变量设为私有,并具有向多边形添加点的功能。至少我认为你应该做那两件事。