每个人我都必须制作一个动态矩阵,这是我拥有的构造函数和析构函数:
Board::Board() {
a_l=0;
a_c=0;
a_mp=NULL;
}
Board::Board(const Board&t) {
a_l=t.a_l;
a_c=t.a_c;
a_mp=t.a_mp;
Memory();
copy(t);
}
Board::Board(int nl, int nc) {
a_l=nl;
a_c=nc;
Memory();
}
Board::~Board() {
freeMemory();
}
// PRIVATE METHODS
void Board::copy(const Board &t) {
int a_l, a_c;
int ** a_mp;
a_l=t.a_l;
a_c=t.a_c;
for(int i=a_l;i<a_c;i++) {
for(int j=a_c;j<a_l;j++) {
a_mp[i][j]=t.a_mp[i][j];
}
}
}
void Board::freeMemory() {
for(int i=0;i<a_l-1;i++) {
delete [] a_mp[i];
}
delete [] a_mp;
}
void Board::Memory() {
char ** a_mp;
a_mp = new char*[a_l];
for(int i =0;i<a_l; i++) {
a_mp[i]=new char[a_c];
for(int j=0;j<a_c;j++)
a_mp[i][j]='-';
}
}
Board 是类,a_l 和 a_c 是矩阵的行数和列数。在我的主要声明中,我声明了一个 Board 变量,然后我这样做:
board=Board(5,5);
它可以编译,但是当我想显示它时,例如:
cout << board.Cols() << endl;
这是方法:
int Board::Cols() const {
return (a_c);
}
它显示为 0。好像它没有使用我说的参数创建板。当我这样做时程序也会崩溃,board=Board(5,5);
所以我使用调试器,它说它在删除的这一行停止:
board=Board(5,5);
我不知道它为什么会崩溃,也不知道为什么它不保留我声明的 board 变量的值!有谁知道为什么?
编辑:rMemory=Memory,它是这里的一种类型,而不是来自程序的类型