0

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

//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_ 向量都会导致胡说八道。你能帮助我吗?

非常感谢您!

4

1 回答 1

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;
于 2013-08-27T11:02:31.193 回答