1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| #include<stdio.h>
#include<stdlib.h>
#define NOMBRE_COUPS_MAXI 50
int alloueMemoire(char ** const , char ** const , size_t const );
int alloueMemoire(char ** const ptirage , char ** const pproposition , size_t const cpt_lancePiece)
{
char *p;
p = realloc( *ptirage , cpt_lancePiece ); /* Si le 1er parametre de 'realloc' vaut NULL, alors la fonction se comporte comme 'malloc' */
if (p == NULL)
{
printf("REALLOC : Erreur d'allocation\n");
free(*ptirage) , *ptirage = NULL;
free(*pproposition) , *pproposition = NULL;
return 0;
} else
*ptirage = p;
p = realloc( *pproposition , cpt_lancePiece ); /* ... et ici aussi, forcément. */
if (p == NULL)
{
printf("REALLOC : Erreur d'allocation\n");
free(*ptirage) , *ptirage = NULL;
free(*pproposition) , *pproposition = NULL;
return 0;
} else
*pproposition = p;
return 1;
}
int main(void)
{
size_t cpt_lancePiece = 0;
char * ptirage = NULL , * pproposition = NULL;
int success;
/* on boucle 'NOMBRE_COUPS_MAXI' fois, sauf si une erreur survient avant */
while ( ++cpt_lancePiece <= NOMBRE_COUPS_MAXI && (success = alloueMemoire ( &ptirage , &pproposition , cpt_lancePiece )) )
{
/* ... ajouter du code ici (stocker en mémoire, dans la mémoire allouée, le dernier coup joué (pile ou face), etc) ... */
printf("%d> %p %p\n", cpt_lancePiece , ptirage , pproposition); /* inutile, affiche simplement la valeur des pointeurs à chaque appel de 'alloueMemoire' */
}
free (ptirage) , ptirage = NULL; /* il n'y a aucun risque à utiliser 'free' même avec une valeur NULL en paramètre (au cas où le pointeur aurait été remis à NULL juste avant) */
free (pproposition) , pproposition = NULL;
getchar(); /* évite au programme de refermer sa fenêtre immédiatement, cela permet de lire les résultats */
return 0;
} |