我在我的C++程序中遇到了段錯誤,無法找出我的錯誤。
我有一個Map類,它是類MapCells對象的2D向量。任務是從一個細胞到另一個細胞。從每個細胞中,有兩種可能的方式來處理其他細胞。也許一些「僞」代碼可以更好地解釋它:在C++中使用向量中的指針後發生Segfault
//map.h
class MapCell {
private:
MapCell *p_way1_, *p_way2_;
int some_information_;
public:
MapCell* getWayPointer1();
MapCell* getWayPointer2();
int getInformation();
void setWayPointer1(MapCell* new_p_way1);
void setWayPointer1(MapCell* new_p_way2);
};
class Map {
private:
std::vector< std::vector<MapCell> > map_;
public:
void initializeMap();
MapCell* getStartPointer();
};
int main()
{
Map map;
map.initializeMap();
MapCell *p_current_cell, *p_next_cell;
p_current_cell = map.getStartPointer();
while(p_current_cell->getInformation() != 0)
{
if(p_current_cell->getInformation() == 1)
{
p_next_cell = p_current_cell->getWayPointer1();
}
else
{
p_next_cell = p_current_cell->getWayPointer2();
}
p_current_cell = p_next_cell;
}
return 0;
}
這只是實際代碼的一小部分。但我認爲我犯了一個根本的錯誤,所以我希望這是足夠的代碼來解決它。 問題是,我的代碼在沒有問題的情況下運行了幾分鐘,突然間發生了段錯誤。 gdb指出,段錯誤發生在調用getInformation()時。
我也發現,在某些時候,所有的p_way2_向量都會導致無意義。
你能幫我嗎?
非常感謝您提前!
沒有看到的實現你的'getStartPointer'和'getInformation',等等,這是不可能說什麼可能會錯誤。 –
我同意第一條評論。這可能是你的週期終止條件有問題。你確定每個單元格中指針的設置方式嗎?也許將它們初始化爲NULL並在循環中檢查NULL將是更安全的方法。 –
getInformation()是一個常規的getter函數。 getStarterPointer()就像'return&map_.at(0).at(0);'。 –