Language C- allocation dynamique

Marjo81 -  
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'ai un exercice à faire en prog. C et je ne comprends pas. SVP aidez moi.. J'ai besoin qu'on m'explique la solution. Merci !!!

Un petit comique a enlevé toutes les étoiles de la fonction Myst(), ce qui fait qu'elle ne compile plus. Réécrivez cette fonction en y mettant les étoiles manquantes pour qu'elle fonctionne (il en manque 11 au total).
#include <stdio.h>
#include <stdlib.h>

void Myst(int tab, int nbr)
{ int n;

do{
printf("Entrez un nombre entier (0 pour terminer): ");
fflush(stdin);
scanf("%d", &n);

if(n != 0){
nbr = nbr + 1;
tab = (int ) realloc( tab, nbr );
( tab )[ nbr-1 ] = n;
}

} while(n != 0);
}

//la fonction "main" ne contient pas d'erreurs
int main(){
int *tableau = NULL, nbr = 0;

Myst(&tableau, &nbr); //ici ou transmet le pointeur par référence!!

return EXIT_SUCCESS;
}

1 réponse

fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Il n'y a pas que les étoiles qui manquent pour rendre le code correct.
Par exemple, dans un code il ne faut jamais mettre fflush(stdin) : comportement non défini.

void Myst(int tab, int nbr)
Il s'agit de : int *tab (pointeur sur une zone à allouer)
tab = (int ) realloc( tab, nbr );
tab=(int *)... bien que le cast est inutile, voir déconseillé.

Voilà les deux premiers endroits où il en manque. A toi de continuer.

PS : Myst(&tableau, &nbr); //ici ou transmet le pointeur par référence!!

Euh, ya pas de référence en C. Il suffit faut enlever l'esperluette (&) devant tableau puisqu'on transmet son adresse.
Où t'as eu cet exo ???
Cdlt,
0