動的マトリックスを作成する必要があるすべての人がいます。これが私が持っているコンストラクターとデストラクタです。
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);
なぜクラッシュするのか、宣言したボード変数の値が保持されないのかわかりません! 誰でも理由を知っていますか?
EDIT:rMemory =メモリ、それはプログラムからではなく、ここからのタイプでした