【发布时间】:2013-08-28 06:03:08
【问题描述】:
我有一个名为 gridObject 的基类
这是头文件:
#ifndef ITEM_H
#define ITEM_H
class gridObject
{
public:
gridObject();
virtual ~gridObject();
virtual int get_GridID() = 0;
virtual int get_x() = 0;
virtual int get_y() = 0;
virtual int get_direction() = 0;
void set_x(int x);
void set_y(int y);
void set_direction(unsigned int direction);
protected:
private:
int _x;
int _y;
unsigned int _direction;
};
#endif // ITEM_H
我有一个叫做 player 的子类
这是类文件中的 get_GridID() 方法:
int player::get_GridID() { return 2; }
还有一个网格类,它通过二维向量跟踪其上的所有对象。在头文件中,有那个向量:
private:
vector<vector<gridObject*> > _position;
以下是分别在特定位置设置和获取对象的方法:
void grid::setGridPosition(int x, int y, gridObject* obj) { _position[y][x] = obj; }
gridObject* grid::getGridPosition(int x, int y) { return _position[y][x]; }
我遇到的问题在这里:
int main()
{
grid * gr = new grid(10, 10);
player p(0, 0, 100);
gridObject * go = &p;
gr->setGridPosition(0, 0, go);
cout << gr->getGridPosition(0, 0)->get_GridID();
return 0;
}
它在以下位置崩溃:cout getGridPosition(0, 0)->get_GridID();
我已经包含了所有合适的头文件。
编辑:这里是网格的构造函数和_position的初始化:
grid::grid(int width, int length)
{
setSize(width, length);
}
void grid::setSize(int width, int length)
{
setLength(length);
setWidth(width);
}
void grid::setLength(int val) { _position.resize(val); }
void grid::setWidth(int val)
{
for(unsigned int i = 0; i < _position.size() - 1; i++)
for(unsigned int j = 0; j < _position.at(i).size() - 1; j++)
_position.at(i).resize(val);
}
【问题讨论】:
-
你应该尝试删除所有不相关的代码,并添加相关的代码,这是缺失的。例如,您如何初始化
_position?你的构造函数和析构函数是做什么的? -
尤其是
getGridPosiion()和setGridPosition()。请注意,如果您有一个由成员函数触发的故障,那么所述成员应该始终在您发布的代码片段中。 -
添加了构造函数和初始化
-
是的,它只是一个嵌套向量。这不会导致索引越界错误吗?
-
不,如果索引在 [0;向量.size()-1]。但你实际上只是初始化范围 [0; vector.size()-2].
标签: c++ pointers segmentation-fault