无法访问存储在多维向量(C ++)中的Object

时间:2015-03-06 17:19:54

标签: c++ debugging memory vector gdb

我尝试访问存储在多维度向量中的对象:

它是Case类的一个对象。

Carte::Carte(int x, int y) {
this->x = x;
this->y = y;
    for(int i; i<x; i++){
        carte.push_back(std::vector<Case*>());
        for(int j = 0; j<y; j++){
            Case aCase(i, j);
            carte[i].push_back(&aCase);
        }
    }
}

我的Carte.h:

class Carte {
public:
Carte(int x, int y);
virtual ~Carte();
std::vector< std::vector<Case*> > carte;
int x,y;
};

一切都很好,但是当我想将Carte的对象传递给另一个类的构造函数并尝试读取类Case的变量时(因为我的向量中有类Case的对象): / p>

//I deleted the extra code...
Batiment::Batiment(Carte *carte) {
carte->carte[this->x][this->y]->libre = false;
}

这是我的班级案例:

class Case {
public:
Case(int x, int y);
virtual ~Case();
int x,y;
bool libre;
};

当我执行时,有一个&#34;退出值= -1&#34;。

所以我调试了,它说:

Failed to execute MI command:
-data-evaluate-expression "(((('std::_Vector_base<Case*,std::allocator<Case*> >' *) this))->_M_impl)"
Error message from debugger back end:
Cannot access memory at address 0x78

编译过程中没有错误,但似乎我无法访问对象在向量中的位置...

有人知道为什么吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

你将指针推送到一个局部变量,一个变量将超出范围并在你使用该指针之前被破坏,导致你取消引用一个迷路指针,你将获得undefined behavior

有问题的代码:

for(int j = 0; j<y; j++){
    Case aCase(i, j);
    carte[i].push_back(&aCase);
}

对象aCase将超出范围并在循环的下一次迭代中被破坏。