/*
 * Exemple d'utilisation de librairie HAlloc (simplifiée).
 *
 * Par Haypo - 7 Avril 2003 - http://haypo.developpez.com/
 */

#include <stdio.h>
#include "halloc.h"
//---------------------------------------------------------------------------

// Affiche le contenu d'un tableau d'entiers
void AfficheTab (const int *tab, const int taille)
{
  int i;
  printf ("{");
  if (taille != 0) printf ("%i", tab[0]);
  for (i=1; i<taille; i++)
  {
    printf (", %i", tab[i]);
  }
  printf ("}\n");
}

//---------------------------------------------------------------------------

int main(int argc, char* argv[])
{
  int *tab;
  int *tab2;
  int i;
  int ok;

  // Initialise le tableau 1 'tab'
  tab = new int[10];
  for (i=0; i<10; i++) tab[i] = i*i;

  // Initialise le tableau 2 'tab2'
  printf ("Voulez-vous une erreur d'overflow (<ENTREE> pour oui) ?");
  ok = (getchar() == '\n');
  if (ok) {
    printf ("Alloue 10 entiers (int) au lieu de 11.\n");
    tab2 = new int[10];
  } else {
    while (getchar() != '\n');
    tab2 = new int[11];
  }
  for (i=0; i<10; i++) tab2[i] = tab[i];
  tab2[10] = 11;

  // Affichage du contenu
  printf ("\n");
  printf ("Tableau 1 = "); AfficheTab (tab, 10);
  printf ("Tableau 2 = "); AfficheTab (tab2, 11);
  printf ("\n");

  // Libère le tableau 2
  printf ("delete []tab2;\n"); delete []tab2;

  // Libère le tableau 1 ?
  printf ("Voulez-vous oublier de liberer le tableau 1 (<ENTREE> pour oui) ?");
  ok = (getchar() == '\n');
  if (ok) {
    printf ("(ne libere pas tab)\n");
    printf ("\n");
  } else {
    while (getchar() != '\n');
    printf ("delete []tab;\n");
    delete []tab;
  }

  // Vérifie que tous les pointeurs ont bien été libérés
  ConteneurMalloc_Affiche (true);

  // Fin
  printf ("\n");
  printf ("FIN : Pressez <ENTREE> pour quitter : ");
  getchar();
  return 0;
}

//---------------------------------------------------------------------------

