/*************************************************************************************************************************************/ /* */ /* 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'... */ }