/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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-2023.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2021-2023.