Ciao a tutti. Sto creando un programma nel quale ridefinisco gli operatori per una classe che contiene una matrice, ma ho riscontrato dei problemi con la ridefinizione della somma. Infatti al momento della somma di 2 matrici il programma crasha e mi spunta "errore di segmentazione (core dump creato)".
Di seguito il codice del programma. Grazie in anticipo
#include <iostream>
using namespace std;
class Matrice{
public:
//costruttore di default
Matrice(int s=0):size(s){
//allocazione dinamica della matrice
m=new int*[size];
for(int h=0;h<size;h++)
m[h]=new int[size];
//inizializzazione matrice
for(int i=0;i<size;i++){
for(int j=0;j<size;j++)
m[i][j]=0;
}
}
//costruttore copia
Matrice(const Matrice& init):size(init.size){
m=new int*[size];
for(int h=0;h<size;h++)
m[h]=new int[size];
for(int i=0;i<size;i++){
for(int j=0;j<size;j++)
m[i][j]=init.m[i][j];
}
}
//distruttore
~Matrice(){
for(int i=0;i<size;i++)
delete m[i];
delete m;
}
int getS()const{return size;}
int getM(int a, int b)const{return m[a][b];}
void setM(int a,int b,int c){m[a][b]=c;}
//ridefinizione operatore =
Matrice operator=(const Matrice& a)const{
for(int i=0;i<size;i++){
for(int j=0;j<size;j++)
m[i][j]=a.m[i][j];
}
return *this;
}
//ridefinizione operatore + (probabilmente è qui l'errore)
Matrice operator+(const Matrice& a)const{
Matrice temp;
for(int i=0;i<size;i++){
for(int j=0;j<size;j++)
temp.m[i][j]=m[i][j]+a.m[i][j];
}
return temp;
}
private:
int** m;
int size;
};
//ridefinizione operatore <<
ostream& operator<<(ostream& os,const Matrice& a){
for(int i=0;i<a.getS();i++){
for(int j=0;j<a.getS();j++)
os<<a.getM(i,j)<<" ";
cout<<endl;
}
return os;
}
//ridefinizione operatore >>
istream& operator>>(istream& is, Matrice& a){
int temp;
for(int i=0;i<a.getS();i++){
for(int j=0;j<a.getS();j++){
is>>temp;
a.setM(i,j,temp);
}
}
return is;
}
int main(){
Matrice a(2),b(2),c(2);
cin>>c;
b=c;
cout<<b<<endl;
//qui il programma crasha
a=b+c;
cout<<a<<endl;
return 0;
}