我的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;
答案 0 :(得分:0)
point P[]
并不能按照您的想法行事。我不完全确定它在这种情况下是否有效,但如果是,则它与point * P
相同。
所以最好你有一个需要用某些东西初始化的指针。
您可能认为*psdfs.P = *new point[4]
会这样做,但事实并非如此。这也是无效的,但是如果它是从数组到数组的值/副本分配......但是你没有数组,你有一个指向谁知道什么的指针。 / p>
你真正想要的是psdfs.P = new point[4]
。
现在所有这些只涉及技术,使其成为代码的工作方面。另一个问题是你的课程设计非常糟糕。你不应该进入这样的类并操纵它们,尤其是初始化数组 - 这应该在构造函数中完成。
我建议使用std::vector
而不是使用new []进行分配。我会将变量设为私有,并具有向多边形添加点的功能。至少我认为你应该做那两件事。