1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| #include <stdlib.h>
#include <stddef.h>
/* ---------------------------------------------------------------------
UTILS_create_matrix : créé une matrice de nrows lignes et ncols colonnes
initialisée à 0. size_row est la taille d'un pointeur vers un élément
à stocker dans la matrice, size_col est la taille d'un élément. La
mémoire utilisée est allouée avec malloc/calloc est doit être libérée
avec free (ou free_matrix).
---------------------------------------------------------------------
@param nrows : nombre de lignes de la matrice
@param ncols : nombre de colonnes de la matrice
@param p_elem_size : taille d'un pointeur vers un élément
@param elem_size : taille d'un élément
---------------------------------------------------------------------
@return : pointeur sur la matrice créée ou NULL en cas de mémoire
insuffisante
--------------------------------------------------------------------- */
void *UTILS_create_matrix(size_t nrows, size_t ncols, size_t p_elem_size, size_t elem_size){
void **m;
if((m = malloc(nrows * p_elem_size)) != NULL){
size_t i;
for(i = 0; i < nrows; i++){
if((m[i] = calloc(ncols, elem_size)) == NULL){
UTILS_free_matrix(m, i), m = NULL;
break;
}
}
}
return m;
}
/* ---------------------------------------------------------------------
UTILS_free_matrix : libère la mémoire utilisée pour la matrice m.
---------------------------------------------------------------------
@param m : adresse de la matrice à détruire
@param n_p_elem : nombre de pointeurs vers éléments contenus dans la
matrice
--------------------------------------------------------------------- */
void UTILS_free_matrix(void *m, size_t n_p_elem){
if(m){
size_t i;
void **mat = (void **)m;
for(i = 0; i < n_p_elem; i++){
if(mat[i]){
free(mat[i]), mat[i] = NULL;
}
}
}
} |
Partager