- inittab() : ceci est faux :
tab est un int** pas un int *. Tu as la malchance d'avoir size(int) == sizeof(int*) ce qui fait que ça semble marcher.
Correction :
Code:
1 2 3
| *(*tab+i)=RIEN;
// ou
(*tab)[i]=RIEN; |
- inittab() : on doit tester que le retour de malloc n'est pas NULL
Code:
1 2 3 4 5 6 7
| void inittab(int **tab)
{
int i;
*tab = malloc(sizeof(int)*NB);
if(*tab != NULL)
for(i=0;i<NB;i++) (*tab)[i]=RIEN;
} |
- Ta fonction enfile() ne nous apprend rien puisqu'elle invoque des variables globales (tete, cases). Il faut prohiber les variables globales sauf absolue nécessité car ce sont des pestes pour plusieurs raisons L'une d'elles est qu'elles empêchent les fonctions d'être des portions de code autonome compréhensibles indépendamment du reste du programme.
- le va++ dans enfile() ne sert à rien
- le realloc() peut échouer et retourner NULL. Dans ton code, la mémoire précédemment allouée devient irrécupérable.
La schéma typique d'utilisation est :
Code:
1 2 3 4 5 6 7 8 9 10 11
| int * p =realloc(tab,NB*sizeof(int));
if(p != NULL)
{
tab = p;
....
}
else // échec de réallocation. Prendre les dispositions qui s'imposent
{
free(tab); // par exemple récupérer la mémoire allouée précédemment
....
} |
- pour le plantage sur le realloc(), il faut montrer plus amplement le code où il intervient.