【发布时间】:2013-04-11 16:14:07
【问题描述】:
我必须创建一个动态矩阵,这是我拥有的构造函数和析构函数:
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,它是这里的类型而不是程序中的类型
【问题讨论】:
-
向我们展示
Memory()函数的实现。 -
显示你的 Memory() 代码
-
board=Board(5,5);行不通,这是 c++,而不是 Board board = new Board(5,5); a_c 和 a_l 是什么类型?
-
他们都是int。 @tacp,Memory=rMemory,复制代码时打错了
-
@Infested,“board=Board(5,5); 不起作用” - 为什么?
标签: c++ class pointers constructor