Bonsoir,
On mettra la définition de la fonction
int sidouble_existe(int *tab,int val)
en dehors de la fonction main() qui elle a un retour de type int.
Plusieurs remarques dans cette fonction sidouble_existe() :
- strlen(tab) n'est absolument pas adapté ici. Cette fonction détermine la taille d'une chaine de caractères. Pour cela elle se base sur une adresse de départ, et se termine sur le premier caractère '\0' qu'elle rencontre à partir de cette adresse. En aucun cas elle ne calcule la taille allouée d'un tableau quelconque.
Tu dois ici passer en argument supplémentaire cette même taille que tu essayes de calculer. - Cette affectation existe_double=0; ne sert à rien : existe_double est déjà à zéro, et si ce n'est pas le cas, on est sorti de la boucle.
- *(tab+i) question de goût je préfère l'écriture tab[i]
Passons au reste :
- Tu vérifies bien le retour de p=(int*)realloc(w,sizeof(int)) (bien que tu continues normalement ton programme...) mais tu ne vérifies pas w=(int*)malloc(sizeof(int));.
À noter que le cast de malloc/realloc est inutile en C (cf. FAQ). - La réallocation précédente ne fait que ré-allouer de l'espace mémoire pour un seul entier, et cet espace n'est PAS complémentaire aux précédents, mais il les remplace. Il te faut multiplier sizeof(int) par le nouveau nombre d'éléments voulu.
- getch(); on lui préfèrera getchar(); qui lui est portable.
Partager