Ejecuta en el depurador y veras que tienes 2 violaciones de segmento (en las dos funciones MatrixC de 3 y 4 argumentos) porque intentas acceder a los elementos de una array no inicializado:
Código C:
Ver originalMatrixC(int a1,int a2, int a3) {
int i,j;
//primero tienes que reservar la memoria necesaria
M = new complejo *[a1];
for(i = 0; i < a1; i++ ) {
M[i] = new complejo[a2];
}
f=a1;
c=a2;
for(i=0; i<f; i++) {
for(j=0; j<c; j++) {
M[i][j].r = a3;//sin reservar memoria esto es una violacion de segmento
M[i][j].i = a3;//y esto otra pero que nunca llega a ejecutarse
}
}
};
//necesitas lo mismo para la tra MatrixC de 4 argumentos
Recuerda que cuando reservas memoria dinamica para cada new necesitas un delete
Saludos
vosk