Ver Mensaje Individual
  #6 (permalink)  
Antiguo 14/06/2005, 06:06
MaxExtreme
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 7 meses
Puntos: 17
Puf puf, no vi el segundo error, que también es cierto, supuse que las funciones auxiliares estaban bien, porque las soléis sacar de otros sitios. Tienes en total 5 errores.

Lo primero, tienes un doble puntero. Primero necesitas reservar memoria para A y luego para cada unno de los punteros que acabas de crear.

Segundo, para usar la matriz usas a[i][j], nada de a[i]. Si te das cuenta, a es el array de los PUNTEROS que a su vez son arrays de ints, por lo tanto lo que modificas de esa manera son los PUNTEROS.

Tercero, al liberar los punteros, en el bucle debes hacer delete [] a[i], lo que elimina todo el array. Son cosas diferentes

a = new int -> delete a
a = new int[] -> delete [] a

En cambio, lo que tú haces es:

a = new int[] -> delete a

Cuarto, al igual que al crear la matriz, al destruirla, despues de hacer el bucle que libera los punteros, debes liberar el puntero de los punteros, o sea a, con delete [] a.

Quinto, estás haciendo a=Suma(a,b,N). Como Suma() crea una matriz nueva dentro de ella, y luego la asignas a "a", estás perdiendo el puntero a "a", y por tanto al final del programa queda sin eliminar. Quizás piensas que poner esa línea lo que hace es sustituir la matriz "a" ya sumada por la "a" original, pero NO. Estás SUSTITUYENDO los PUNTEROS, no la MATRIZ. Para hacer cosas de ese estilo se tendrían que usar clases, en las que pueden definir los comportamientos, pero no punteros dado que estás creyendo que tu "int **" es una matriz que la puedes usar como un objeto, cuando en realidad es un simple puntero.