Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/06/2005, 17:46
Avatar de spike_jr
spike_jr
 
Fecha de Ingreso: febrero-2005
Ubicación: Valencia
Mensajes: 114
Antigüedad: 19 años, 9 meses
Puntos: 2
¿Donde se encuentra el error en este programa de matrices?

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 )