无法访问存储在多维向量中的对象 (C++)
Can't access to Object stored in multidimensional vector (C++)
我尝试访问存储在多维向量中的对象:
它是 class 案例的对象。
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 的对象传递给另一个 class 的构造函数并尝试读取 class 案例的变量时(因为有 class 我的向量中的案例):
//I deleted the extra code...
Batiment::Batiment(Carte *carte) {
carte->carte[this->x][this->y]->libre = false;
}
这是我的 class 案例:
class Case {
public:
Case(int x, int y);
virtual ~Case();
int x,y;
bool libre;
};
当我执行时,有一个"exit value = -1"。
所以我调试,它说:
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
编译期间没有错误,但我似乎无法访问对象在向量中的位置...
有人知道为什么吗?
谢谢。
你将一个指针推送到一个局部变量,这个变量将超出范围并在你使用该指针之前被破坏,导致你取消引用一个流浪指针,你将得到 undefined behavior.
有问题的代码:
for(int j = 0; j<y; j++){
Case aCase(i, j);
carte[i].push_back(&aCase);
}
对象 aCase
将超出范围并在循环的下一次迭代中被破坏。
我尝试访问存储在多维向量中的对象:
它是 class 案例的对象。
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 的对象传递给另一个 class 的构造函数并尝试读取 class 案例的变量时(因为有 class 我的向量中的案例):
//I deleted the extra code...
Batiment::Batiment(Carte *carte) {
carte->carte[this->x][this->y]->libre = false;
}
这是我的 class 案例:
class Case {
public:
Case(int x, int y);
virtual ~Case();
int x,y;
bool libre;
};
当我执行时,有一个"exit value = -1"。
所以我调试,它说:
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
编译期间没有错误,但我似乎无法访问对象在向量中的位置...
有人知道为什么吗?
谢谢。
你将一个指针推送到一个局部变量,这个变量将超出范围并在你使用该指针之前被破坏,导致你取消引用一个流浪指针,你将得到 undefined behavior.
有问题的代码:
for(int j = 0; j<y; j++){
Case aCase(i, j);
carte[i].push_back(&aCase);
}
对象 aCase
将超出范围并在循环的下一次迭代中被破坏。