insert(std::map<int,struct>) 分段错误(核心转储)
insert(std::map<int,struct>) segmentation fault (core dumped)
我的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;
point P[]
并不像你想象的那样。我不完全确定它在这种情况下是否有效,但如果是,那么它与point * P
相同。
所以你最多有一个需要初始化的指针
你可能认为*psdfs.P = *new point[4]
做到了这一点,但它没有。这是无效的,但如果它是,它将是一个值/复制赋值从一个数组到一个数组…但是你没有一个数组,你有一个指针,谁知道是什么。
你真正想要的是psdfs.P = new point[4]
。
现在所有这些都只是技术上的,让它在你的代码中起作用。另一个问题是,你的类的设计非常糟糕。你不应该像这样进入类并操纵它们,尤其是初始化数组——这应该在构造函数中完成。
我建议使用std::vector
而不是new[]分配。我将使变量私有,并有函数添加点到多边形。至少我认为你应该做到这两件事。
相关文章:
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 分段错误(核心转储)但无法弄清楚
- 分段错误(核心转储) - 使用 SavedModel 的 Tensorflow C++ API 进行推断
- C++指针无法在函数外部传递值和分段错误(核心转储)错误
- 合并排序:分段错误核心转储
- C++:分段错误(核心转储)
- 从 pybind11 构建导入模块时出现"分段错误(核心转储)"
- qt C++命令行代码中的分段错误(核心转储)
- C++ atof - 分段错误(核心转储)
- 为什么我的代码包含错误分段错误(核心转储)?
- 运行编译的 a.out 后出现分段错误(核心转储)错误
- 为什么我的代码给我一个分段/核心转储错误?
- 运行我的代码时出现分段错误(核心转储)问题
- C++代码的分段错误(核心转储)
- 分段故障(核心转储)-不知道为什么
- 分段错误:从文件中访问csv记录时转储了核心
- 如何避免出现分段核心转储错误?
- C++ Sqlite3 中,执行 2 个 sql 语句 - 第 2 条语句得到分段核心转储错误
- 分段核心转储C++,在构造函数中