大家要我做一個動態矩陣和這裏的構造函數和析構函數,我有:C++分段錯誤刪除動態表時
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]='-';
}
}
董事會類和A_L和a_c是行和列數矩陣。在我的主,我宣佈一個局變量,然後我做到這一點:
board=Board(5,5);
它編譯,但是當我想要顯示它,像這樣的例子:
cout << board.Cols() << endl;
這是方法:
int Board::Cols() const {
return (a_c);
}
它顯示0.如果它沒有創建與我說的參數板。 此外,當我做到這一點board=Board(5,5);
,所以我使用調試器的程序崩潰和它說,它停在這條線的刪除:
board=Board(5,5);
我不知道爲什麼它崩潰,我不知道爲什麼不保留我聲明的電路板變量的值! 任何人都知道爲什麼?
編輯:rMemory =內存,它是從這裏不是從程序
顯示我們執行'內存()'函數。 – soon
顯示您的代碼Memory() – taocp
board = Board(5,5);不會工作,這是C++,而不是董事會董事會=新董事會(5,5);什麼類型是a_c和a_l? – Infested