Deallocare una matrice

di il
4 risposte

Deallocare una matrice

Salve!
Ho creato un tipo di dato struttura così definito :

typedef struct
{
   double **matrice;   /* Matrice */
   int    num_righe;   /* Numero righe della matrice */
   int    num_colonne; /* Numero colonne della matrice */
} matrice_t;

Poi ho allocato dinamicamente la matrice tramite questa funzione :

void alloca_matrice(matrice_t *mat)
{
   int i;

   /* alloca le righe */

   mat -> matrice = (double **)calloc(mat-> num_righe,sizeof(double *));

   /* alloca le colonne */

   for (i=0;
        i < mat->num_righe;
	i++)
   {
     	   mat-> matrice[i] = (double *)calloc(mat-> num_colonne,sizeof(double));

   }

}


Dopo aver svolto vari calcoli tra matrici, arrivato alla fine del programma, ho invocato la funzione da me definita per deallocare la matrice:

void dealloca_matrice(matrice_t *mat)
{
   int i;

   for (i = 0;
	i < mat -> num_righe;
	i++)
   {
	   free(mat -> matrice[i]);
	   free(mat -> matrice);
   }
}


invocandola in questo modo nella funzione main per ogni matrice allocata :

   dealloca_matrice(&matrice_a);
   dealloca_matrice(&matrice_b);
   dealloca_matrice(&matrice_som_dir);
   dealloca_matrice(&matrice_prod_dir);

Al momento dell'esecuzione, i calcoli vengono eseguiti correttamente, ma al termine compare questo :
free() : invalid pointer
Annullato (core dump creato).
Cosa ho sbagliato? Mi dareste una grande mano

4 Risposte

  • Re: Deallocare una matrice

    La seconda free deve stare fuori dal ciclo.
  • Re: Deallocare una matrice

    Giusto, grazie mille!
  • Re: Deallocare una matrice

    oregon ha scritto:


    La seconda free deve stare fuori dal ciclo.
    Scusami, ho una domanda.
    Io nel programma alloco dinamicamente 4 matrici che utilizzo per tutto il programma, quindi, a che mi serve deallocare alla fine?
  • Re: Deallocare una matrice

    Nello specifico non ti serve ma è buona regola prevederlo da codice per il futuro.
Devi accedere o registrarti per scrivere nel forum
4 risposte