gpt4 book ai didi

c++ - insert(std::map) 段错误(核心已转储)

转载 作者:太空狗 更新时间:2023-10-29 23:14:35 24 4
gpt4 key购买 nike

我的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com