6Fermer8
spectrasLe 09/11/2003 à 10:43
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"