在C ++中使用向量中的指针后的Segfault

时间:2013-08-27 10:28:39

标签: c++ pointers vector segmentation-fault

我在我的c ++程序中遇到了段错误,无法弄清楚我的错误 我有一个类Map,它是MapCells类对象的2D矢量。任务是从一个细胞到另一个细胞。从每个细胞,到其他细胞有两种可能的方式。也许一些“伪”代码可以更好地解释它:

//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_载体都会导致废话。你能帮助我吗?

非常感谢你!

1 个答案:

答案 0 :(得分:0)

行中的问题

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;