Tu peux aussi avoir recours à une astuce qui évite de faire plein d'allocations indépendantes :
void ** nouveau_tableau(int lignes, int colonnes, int taille_type)
{
int i;
void ** resultat;
int taille_entete = lignes*sizeof(void*);
int taille_ligne = colonnes*taille_type;
int taille = taille_entete + lignes*taille_ligne;
resultat = calloc(1, taille);
for (i = 0; i < lignes; i++)
resultat[i] = (char*)resultat + taille_entete + i*taille_ligne;
return resultat;
}
En fait, on alloue en un bloc tout le tableau, plus un entête qui contient des pointeurs sur les lignes (pour l'accès avec la méthode C normale. Voici un exemple d'utilisation de ce tableau :
int ligne, colonne;
int ** table = (int**)nouveau_tableau(5, 8, sizeof(int));
for (ligne = 0; ligne < 5; ligne++)
for (colonne = 0; colonne < 8; colonne++)
table[ligne][colonne] = ligne+colonne;
Cet exemple alloue un tableau d'entiers, de 5 lignes par 8 colonnes, puis le remplit comme ca :
0 1 2 3 4 5 6 7
1 2 3 4 5 6 7 8
2 3 4 5 6 7 8 9
3 4 5 6 7 8 9 10
4 5 6 7 8 9 10 11
Nota : je ne sais pas si tigcc gère le qqc++. Si ce n'est pas le cas, remplace tous les "qqc++" par des "qqc = qqc +1"