Salve a tutti,
ho un problemino con i puntatori, ho un main.c che richiama una libreria passando ad una funzione di librearia un puntatore a struttura.

Detto in poche parole questo è il main.c:

codice:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include "my_libreria.h"

int main()
{
  matrix *mat1,*mat2;
  
  scrivi_elem(&mat1,0,0,1);
  
  printf("%d\n",mat1->matrice[0][0]);
  system("pause");	

}
questa è my_libreria.h dove ci sono tutte le dichiarazioni:
codice:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

#define cost_elem_max 100

typedef enum{  
               ERR_DIMENSIONI_ZERO = -1,
               ERR_DIMENSIONI_DIFFERENTI = 0, 
               ERR_NORMA_ZERO = 1, 
               ERR_SCALARE_NULLO = 2, 
               SUCCESS = 3
             } CODICE_ERRORE;
             
typedef struct{
                int matrice[cost_elem_max][cost_elem_max];
                int num_riga;
                int num_colonna;
              }matrix;

CODICE_ERRORE differenza(matrix *matr1,matrix *matr2,matrix *matr3);
/*-----------------------------------------------------------------------------*/
int norma(matrix *matr1);
/*-----------------------------------------------------------------------------*/
CODICE_ERRORE normalizzazione(matrix *matr1);
/*-----------------------------------------------------------------------------*/
CODICE_ERRORE prodotto_scalare(matrix *matr1,int scal);
/*-----------------------------------------------------------------------------*/
CODICE_ERRORE prodotto(matrix *matr1,matrix *matr2,matrix *matr3);
/*-----------------------------------------------------------------------------*/
CODICE_ERRORE prodotto_vettoriale(matrix *matr1,matrix *matr2,matrix *matr3);
/*-----------------------------------------------------------------------------*/
CODICE_ERRORE somma(matrix *matr1,matrix *matr2,matrix *matr3);
/*-----------------------------------------------------------------------------*/
void vett_trasposto(matrix *matr1,matrix *matr2);
/*-----------------------------------------------------------------------------*/
int leggi_elem(matrix *mat1,int riga,int colonna);
/*-----------------------------------------------------------------------------*/
void scrivi_elem(matrix *mat1,int riga,int colonna,int elemento);
e la seguente è la funzione incriminata di my_libreria.c (non ve la inserisco tutta perchè senno sarebbe troppo lunga):


codice:
void scrivi_elem(matrix* mat1,int riga,int colonna,int elemento)
{
     
    mat1->matrice[riga][colonna] = elemento;
    mat1->num_colonna = 4;
    system("pause");
    
   
}
Ora il programma si compila e poi crasha. Le due righe che mi danno problemi (se le commento il problema sparisce), sono l'asegnazione di "mat1->num_colonna" nella funzione di libreria, e la printf nel main.

Sicuramente sbaglierò qualcosa di sinstassi ma non riesco a capire cosa.

Vi ringrazio in anticipo per la disponibilità,
Neptune.