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

insert(std::map<int,struct>) segmentation fault (core dumped)

我的 C++ 代码的一个简单部分有问题,问题是:我有一个相当大的程序 运行 正在处理一些 SLAM 的东西(一切都很完美),但我似乎无法查看我的一小部分代码有什么问题。我有一个名为多边形的结构,它由一个点数组(这是一个不同的结构)和数组中的点数组成。

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;

point P[] 并不像您想象的那样。我不完全确定它在那种情况下是否有效,但如果有效,那么它与 point * P.

相同

所以充其量您基本上有一个需要用某些东西初始化的指针。

您可能认为 *psdfs.P = *new point[4] 可以做到这一点,但事实并非如此。那也是无效的,但如果它是一个 value/copy 从一个数组到另一个数组的赋值……但是你没有数组,你有一个指向谁知道什么的指针。

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

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

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