A la función CrearMatriz() le estás pasando, en efecto, un puntero a un tipo Matriz. Pero, dentro de esa función, estás asignando a M la direeción que te devuelve la función malloc(). Lo que ocurre es que lo que entra a CrearMatriz es una copia del puntero, y lo que hagas dentro de CrearMatriz() con esa copia del puntero se pierde al salir de la función. Con el añadido de que, en esa función, has reservado una memoria a la que ya no podrás acceder una vez que salgas de la función, pero queda marcada como reservada.
Hay dos posibles soluciones:
1. Para poder modificar ese puntero que has pasado como parámetro a la función, deberás pasar la dirección del puntero (es decir, un puntero a puntero).
Código C:
Ver originalvoid CrearMatriz (Matriz **M, int f, int c)
{
...
}
2. La segunda opción es que la función devuelva un puntero a Matriz:
Código C:
Ver originalMatriz *CrearMatriz (int f, int c))
{
Matriz *P;
P
->vector
= (int *)malloc(...
)
...
return P;
}
Personalmente, prefiero esta segunda opción.
En el programa, quedaría:
Código C:
Ver original#include <stdio.h>
#include <stdlib.h>
#include "matriz.h"
int main(int argc, char** argv) {
Matriz *M;
int f=3;
int c=3;
M = CrearMatriz (f,c);
//
// Llamar aquí a la función para borrar matriz
//
return (EXIT_SUCCESS);
}
Tendrías que crear también una función para eliminar una matriz.
Saludos,