class matrix{
private:
int n, *wsk;
friend istream & operator>>(istream&,matrix&);
friend ostream & operator<<(ostream&,matrix&);
public:
matrix(){
wsk=0;
n=0;
}
matrix(const matrix &mat){
this->n=mat.n;
if (wsk!=0) delete []wsk;
this->wsk=new int [this->n*this->n];
for (int i=0;i<n*n;i++)
wsk[i]=mat.wsk[i];
}
~matrix(){
if (this->wsk!=0) delete[]this->wsk;
}
const matrix & operator=(const matrix &mat){
if(&mat==this) return *this;
if (this->wsk!=0) delete [] this->wsk;
n=mat.n;
this->wsk=new int [n*n];
for (int i=0;i<mat.n*mat.n;i++)
this->wsk[i]=mat.wsk[i];
return *this;
}
};
istream & operator>>(istream &str, matrix& mat){
str >> mat.n;
if (mat.n>0) {
if (mat.wsk != 0) delete[]mat.wsk;
mat.wsk= new int [mat.n*mat.n];
for (int i=0;i<mat.n*mat.n;i++)
str >> mat.wsk[i];
}
return str;
}
ostream & operator<<(ostream &str, matrix& mat){
if (mat.wsk!=0){
for (int i=0;i<mat.n*mat.n;i++){
str << mat.wsk[i] << " ";
if ((i+1)%mat.n==0) str << endl;
}
}
return str;
}
当我试图在 main 中制作两个矩阵时,第一个维度低于第二个维度,就会发生 double free 。当两个矩阵的维数相同,或者第一个矩阵的维数高于第二个时,就没有问题。也许有人可以看到代码并告诉我有什么问题?
编辑:主要:
int main(){
matrix mac, a, b;
cout << "Put number of dimensions and numbers in matrix ";
cin >> mac;
cout << mac;
cin >> a;
cout << a;
mac.~matrix();
return 0;
}