c++ - insert(std::map<int,struct>) 段错误(核心已转储)

标签 c++ struct std

我的 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(){};
};

当我运行下面的代码时,出现了段错误,但编译没有错误。你认为它可能是什么?是我没有正确定义 map 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));

多边形是一个

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

最佳答案

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

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

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

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

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

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

关于c++ - insert(std::map<int,struct>) 段错误(核心已转储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33191357/

相关文章:

c++ - Eclipse 给出 MingGW 没有的编译器警告

c - void * 到 C 中的 struct *

c++ - 我可以使用什么 STL 函数来替换 "while (var != nullptr)"循环?

c++ - 在命名空间中定义类的方法

c++ - C++中的删除操作

c++ - 如何将 "using"关键字用于可变参数模板

c - 访问 vector 中结构的成员

go - 使用值创建结构实例

c++ - 获取目录的大小(而不是目录的大小)

c++ - 如何修复 `Any` 类代码以正确输出数据?