/*************************************************************************************************************************************/
/* */
/* T E S T D E L ' A L L O C A T I O N / R E L E A S E D E L A M E M O I R E : */
/* */
/* */
/* Author of '$xtc/alloc.01$c' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, AAAAMMJJhhmmss). */
/* */
/*************************************************************************************************************************************/
#define N \
10
extern void *malloc();
extern void free();
void fonction(x)
int x;
{
printf("\nbonjour (%d)",x);
}
main()
{
int a=1234,b=5678;
char *pointeur1=0,*pointeur2=0,*pointeur3=0;
printf("\n valeur=%d",(fonction(a),b));
/* On verifie ainsi que la "valeur" de 'fonction(n)' (qui est "void" d'ailleurs) n'est pas */
/* la valeur editee par le 'printf(...)'. */
printf("\n pointeur1=%d pointeur2=%d pointeur3=%d",pointeur1,pointeur2,pointeur3);
pointeur1 = pointeur2 = pointeur3 = malloc(N);
printf("\n pointeur1=%d pointeur2=%d pointeur3=%d",pointeur1,pointeur2,pointeur3);
pointeur1 = *((pointeur2 == 0) ? &pointeur2 : (free(pointeur2),&pointeur2)) = pointeur3 = malloc(N);
printf("\n pointeur1=%d pointeur2=%d pointeur3=%d",pointeur1,pointeur2,pointeur3);
/* On verifie ainsi que l'on peut liberer l'espace pointe par 'pointeur2' avant de lui en */
/* en allouee une nouvelle... */
pointeur1 = *((pointeur2 == 0) ? &pointeur2 : (free(pointeur2),&pointeur2)) = pointeur3 = malloc(N);
printf("\n pointeur1=%d pointeur2=%d pointeur3=%d",pointeur1,pointeur2,pointeur3);
pointeur1 = *((pointeur2 == 0) ? &pointeur2 : &pointeur2) = pointeur3 = malloc(N);
printf("\n pointeur1=%d pointeur2=%d pointeur3=%d",pointeur1,pointeur2,pointeur3);
/* ATTENTION, volontairement, l'espace n'est pas libere ici... */
free(pointeur2);
pointeur1 = *((pointeur2 == 0) ? &pointeur2 : &pointeur2) = pointeur3 = malloc(N);
printf("\n pointeur1=%d pointeur2=%d pointeur3=%d",pointeur1,pointeur2,pointeur3);
/* Cette sequence "decomposee" est destinee a verifier que la sequence : */
/* */
/* p = malloc(...); */
/* free(p); */
/* p = malloc(...); */
/* */
/* donne bien deux fois de suite la meme valeur a 'p'... */
}
Copyright © Jean-François COLONNA, 2021-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2021-2024.