在C+中使用向量中的指针后出现SEGFULT+; 我在C++程序中遇到了一个StErgStand,不能弄清我的错误。 我有一个类映射,它是MapCells类对象的2D向量。任务是从一个单元转到另一个单元。从每个单元到其他单元有两种可能的方式。也许一些“伪”代码可以更好地解释它: //map.h 类映射单元{ 私人: MapCell*p_-way1\u、*p_-way2\u; 输入一些信息; 公众: MapCell*getWayPointer1(); MapCell*getWayPointer2(); int getInformation(); 无效设置路径指针1(映射单元*新路径1); 无效设置路径指针1(映射单元*新路径2); }; 类图{ 私人: std::vectormap; 公众: void initializeMap(); MapCell*getStartPointer(); }; int main() { 地图; map.initializeMap(); 映射单元*p_当前单元,*p_下一个单元; p_current_cell=map.getStartPointer(); 而(p_当前_单元格->getInformation()!=0) { 如果(当前单元格->获取信息()==1) { p_next_cell=p_current_cell->getWayPointer1(); } 其他的 { p_next_cell=p_current_cell->getWayPointer2(); } p_当前_单元=p_下一个_单元; } 返回0; }

在C+中使用向量中的指针后出现SEGFULT+; 我在C++程序中遇到了一个StErgStand,不能弄清我的错误。 我有一个类映射,它是MapCells类对象的2D向量。任务是从一个单元转到另一个单元。从每个单元到其他单元有两种可能的方式。也许一些“伪”代码可以更好地解释它: //map.h 类映射单元{ 私人: MapCell*p_-way1\u、*p_-way2\u; 输入一些信息; 公众: MapCell*getWayPointer1(); MapCell*getWayPointer2(); int getInformation(); 无效设置路径指针1(映射单元*新路径1); 无效设置路径指针1(映射单元*新路径2); }; 类图{ 私人: std::vectormap; 公众: void initializeMap(); MapCell*getStartPointer(); }; int main() { 地图; map.initializeMap(); 映射单元*p_当前单元,*p_下一个单元; p_current_cell=map.getStartPointer(); 而(p_当前_单元格->getInformation()!=0) { 如果(当前单元格->获取信息()==1) { p_next_cell=p_current_cell->getWayPointer1(); } 其他的 { p_next_cell=p_current_cell->getWayPointer2(); } p_当前_单元=p_下一个_单元; } 返回0; },c++,pointers,vector,segmentation-fault,C++,Pointers,Vector,Segmentation Fault,这只是真正代码的一小部分。但我认为我犯了一个根本性的错误,所以我希望这是足够的代码来修复它。 问题是,我的代码运行了几分钟没有出现问题,然后突然出现了一个错误。gdb声明,segfault在调用getInformation()时发生。我还发现,在某一点上,所有的p_路径2_向量都会导致无意义。你能帮我吗 提前非常感谢 行中的问题 MapCell* p_current_cell, p_next_cell; MapCell* p_way1_, p_way2; 第二个参数不是指针,MapCell是

这只是真正代码的一小部分。但我认为我犯了一个根本性的错误,所以我希望这是足够的代码来修复它。 问题是,我的代码运行了几分钟没有出现问题,然后突然出现了一个错误。gdb声明,segfault在调用getInformation()时发生。我还发现,在某一点上,所有的p_路径2_向量都会导致无意义。你能帮我吗

提前非常感谢

行中的问题

MapCell* p_current_cell, p_next_cell;

MapCell* p_way1_, p_way2;
第二个参数不是指针,MapCell是从指针隐式转换而来的(否则会出现多个编译时错误)。 试着换成

MapCell* p_current_cell, *p_next_cell;

MapCell* p_way1_, *p_way2;

如果没有看到您的
getStartPointer
getInformation
等的实现,就不可能说出哪里出了问题。我同意第一条评论。你的周期终止条件可能有问题。您确定每个单元格中指针的设置方式吗?也许将它们初始化为NULL并在循环中检查NULL会是更安全的方法。getInformation()是一个常规的getter函数。getStarterPointer()类似于
return&map_2;at.at(0).at(0)。如果上述函数不修改容器,我们想知道如何实现void initializeMap()。初始化映射后,没有空指针。一切都很好。实际上,在我的程序中,上面提到的循环被调用了好几次。我在不同的时间检查了指针。随着时间的推移,指针似乎变得越来越凌乱,但当我使用地图时,指针从未变得凌乱。即使我的程序正在做一些完全不同的事情,地图也有可能被重新分配吗?我如何“跟踪”地图单元格的地址?对不起,这些只是问题中的错误。考虑到这一点,实际代码是正确的。