Ver Mensaje Individual
  #2 (permalink)  
Antiguo 07/01/2017, 12:59
Fw190
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 meses
Puntos: 73
Respuesta: Crear estructura en .h desde main

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 original
  1. void CrearMatriz (Matriz **M, int f, int c)
  2. {
  3.     *M = (Matriz *)malloc(...)
  4.    
  5.     ...
  6.    
  7. }

2. La segunda opción es que la función devuelva un puntero a Matriz:

Código C:
Ver original
  1. Matriz *CrearMatriz (int f, int c))
  2. {
  3.     Matriz *P;
  4.    
  5.     P = (Matriz *)malloc(...)
  6.     P->vector = (int *)malloc(...)
  7.    
  8.     ...
  9.    
  10.         return P;
  11. }


Personalmente, prefiero esta segunda opción.

En el programa, quedaría:

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "matriz.h"
  4.    int main(int argc, char** argv) {
  5.     Matriz *M;
  6.     int f=3;
  7.     int c=3;
  8.     M = CrearMatriz (f,c);
  9.     printf("%d", M->c);
  10. //
  11. // Llamar aquí a la función para borrar matriz
  12. //
  13.     return (EXIT_SUCCESS);
  14. }

Tendrías que crear también una función para eliminar una matriz.

Saludos,