Este programa es la recreación de un problema que tuve hace algún tiempo.
El objetivo es sumar 2 matrices mediante una función Suma, donde las matrices son arreglos bidimensionales creados dinámicamente y su orden es ingresado desde el teclado.
Pero resulta que el programa no muestra errores a la hora de compilar, talvez algunos warnings, pero al momento de ejecutar el exe, sucede alguno de los siguientes casos:
-El programa se cuelga desde el inicio;
-Muestra bien el resultado, pero al final se cuelga;
-Muestra bien el resultado, pero al final muestra el mensaje de error:
Null pointer assignment.
-Muestra bien el resultado pero solo para matrices de orden pequeño;
No se porque se cuelga ni donde puede estar el error. Si alguien es tan amable de hecharle un vistazo lo agradeceria mucho.
Aqui dejo el codigo:
Código:
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
//Asigna Memoria a un puntero doble A
void CrearMatriz( int **A, int Orden);
//Destruye la matriz cuadrada creada con CrearMatriz
void DestruirMatriz( int **A, int Orden);
//Retorna la matriz suma de A y B
int **Suma( int **A, int **B, int Orden );
//Muestra la matriz A
void MostrarMatriz( int **A, int Orden );
void main()
{
//2 punteros dobles, se utilizarán para crear 2 arreglos bidimensionales
//dinámicos
int **a,**b;
int i,j;
int N;
cout<<"\n\nIngrese el orden de las matrices: ";
cin>>N;
CrearMatriz(a,N); //se crea dinámicamente una MATRIZ de orden N
CrearMatriz(b,N); //se crea dinámicamente una MATRIZ de orden N
srand(time(NULL)); //Inicializa el generador números aleatorios,
//dependiente del tiempo actual
for(i=0;i<N;i++)
for(j=0;j<N;j++)
{
a[i][j]=rand()%10; // a y b contienen números naturales menores que 10
b[i][j]=rand()%10;
}
cout<<"\nContenido de matriz A:\n";
MostrarMatriz(a,N); //se muestra la matriz A
cout<<"\n\nContenido de matriz B:\n";
MostrarMatriz(b,N); //se muestra la matriz B
a=Suma(a, b, N); //se ejecuta la función suma y se asigna el
//resultado a la matriz a
cout<<"\n\nLa suma matricial de A y B es:\n";
MostrarMatriz(a,N); //se muestra la suma A+B
DestruirMatriz(a, N); //destruye A
DestruirMatriz(b, N); //destruye B
}
void CrearMatriz( int **A, int Orden)
{
for( int i=0; i<Orden; i++)
A[i] = new int[Orden];
}
void DestruirMatriz( int **A, int Orden)
{
for( int i=0; i<Orden; i++)
delete A[i];
}
int **Suma( int **A, int **B, int Orden )
{
int **C,i,j;
CrearMatriz(C,Orden);
for(i=0;i<Orden;i++)
for(j=0;j<Orden;j++)
C[i][j]=A[i][j]+B[i][j];
return C;
}
void MostrarMatriz( int **A, int Orden )
{
int i,j;
for(i=0;i<Orden;i++)
{
cout<<"\n";
for(j=0;j<Orden;j++)
cout<<A[i][j]<<" ";
}
}
Cita: "La programación es una carrera entre ingenieros de software luchando para construir programas cada vez más grandes, mejores y a prueba de idiotas, y el universo intentando producir cada vez más grandes y mejores idiotas. por ahora, gana el universo." ( Rich Cook )