Salve a tutti, vi posto di seguito il codice che dovrebbe restituire ad un utente, una volta
inseriti i valori per ogni cella e dunque riempite le matrici A e B, una terza matrice C che
rappresenta la somma delle prime due.

MAIN

codice:
#include "stdafx.h"

int main(int argc, char* argv[]){
	
	//costruisce tre matrici 2X2
	CMatrix A(2,2);
	CMatrix B(2,2);
	CMatrix C(2,2);
	
	A.leggiValori(); //richiede all’utente di inserire i valori di A
	B.leggiValori(); //richiede all’utente di inserire i valori di B
	
	A.stampaValori();
	B.stampaValori();
	C.stampaValori();
	
	C=A+B; //esegue la somma tra le due matrici costruite
	
	C.stampaValori(); //stampa a video valori
	
	system("PAUSE");
	
	return 0;
}
INTERFACCIA CLASSE MATRIX

codice:
class CMatrix{
private:
	int **m_mat;
	int m_row, m_col;
	void allocaMemMat(int m_row, int m_col);
	void deleteMat();
public:
	CMatrix();
	virtual ~CMatrix();

	CMatrix(int row, int col);
	
	void stampaValori();
	void leggiValori();

	CMatrix operator+(const CMatrix & C);
	CMatrix & operator=(const CMatrix & C);
};
IMPLEMENTAZIONE DELL'INTERFACCIA

codice:
#include "stdafx.h"

CMatrix::CMatrix(){
	m_row=m_col=0;	
	m_mat=0;
}

CMatrix::~CMatrix(){
	deleteMat();
}

CMatrix::CMatrix(int row, int col){
	m_row=row;
	m_col=col;
	allocaMemMat(m_row, m_col);
}

void CMatrix::deleteMat(){
	for (int i=0; i<m_row; i++)
		delete[] m_mat[i];
	delete[] m_mat;
	m_col=m_row=0;
	m_mat=0;
}

void CMatrix::allocaMemMat(int row, int col){
	//Non deve esserci nessuna matrice allocata, 
	//usare prima delleteMat()
	m_mat=new int*[m_row];
	for (int i=0; i<m_row; i++)
		m_mat[i]=new int[m_col];

}

CMatrix CMatrix::operator+(const CMatrix & C){
	if ((C.m_row==m_row)&&(C.m_col==m_col)){
		CMatrix RIS(m_row, m_col);
		for (int i=0; i<m_row; i++){
			for (int j=0; j<m_col; j++){
				RIS.m_mat[i][j]=C.m_mat[i][j]+ m_mat[i][j];
				}				
		}
		return RIS;
	}else{
		CMatrix RIS;
		return RIS;
	}
}


CMatrix& CMatrix::operator=(const CMatrix & C){
	deleteMat();//cancellazione memoria dinamica
	m_row=C.m_row;
	m_col=C.m_col;
	allocaMemMat(m_row, m_col);//alloco memoria dinamica
	for (int i=0; i<m_row; i++)
		for (int j=0; j<m_col; j++)
			m_mat[i][j] = C.m_mat[i][j];
	return *this;
}

void CMatrix::leggiValori(){
    int val = 0;
    
    for(int x = 0; x < m_row; x++)
        for(int y = 0; y < m_col; y++){
            cout<<"Inserisci un numero per la cella: ";
            cin>>val;
            m_mat[x][y] = val;
        }    
}
void CMatrix::stampaValori(){
        for(int x = 0; x < m_row; x++){
                for(int y = 0; y < m_col; y++)
                        cout<<m_mat[x][y];
                
                cout<<"\n";
    }
}
Ricevo un'eccezione e l'esecuzione non supera i due cicli for dell'overload dell'operatore "=".
Provando a fare delle stampe sono sicuro che dentro RIS ci sia la matrice risultante dalla
somma corretta, ma putroppo al metodo CMatrix& CMatrix:perator=(const CMatrix & C)
arrivano due matrici non inizializzate ovvero m_mat (ci sta l'ho appena allocata) e C.m_mat.
La seconda non deve essere vuota ma dovrebbe essere un riferimento a RIS calcolata
precedentemente...

Quasi sicuramente sbaglio il passaggio di parametri, aiuto...
Grazie.