Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 04/12/2009, à 14:52

$Gaël$

[Résolu]Question sur free()

Bonjour,

J'ai des problèmes de fonctionnement sur un programme:

typedef struct
{
  int iVar;
  int *piPointeur;
}TOTO;

typedef struct
{
  int iVar2;
  TOTO *pToto;
}
int tata = 3;
TOTO *pMonToto;

TOTO *CreateToto(void)
{
  TOTO *pTemp;
  pTemp = (TOTO*) malloc(sizeof(TOTO));
  if (pTemp != NULL)
  {
    pTemp->iVar = 1;
    pTemp->piPointeur = &tata;
  }
  return pTemp;
}

int main(void)
{
  OBJET *pMonObjet;

  pMonToto = CreateToto();

  //Création de pMonObjet
  pMonObjet = (OBJET*)malloc(sizeof(OBJET));
  if(pMonObjet != NULL)
  {
    pMonObjet->iVar2 = 1;
    pMonObjet->pToto = pMonToto;
  }

  //utilisation de pMonObjet...

  //Libération de pMonObjet
  free(pMonObjet);

  //reste du programme....

  //Libération de pMonToto
  free(pMonToto);
}

Est-ce que la libération de l'objet pMonObjet va-t-elle libérer pMonToto aussi?
Pour faire proprement je devrais initialiser le pointeur de TOTO dans la variable OBJET à NULL avant de libérer la variable. Est-ce obligatoire?

Gaël

Dernière modification par $Gaël$ (Le 05/12/2009, à 12:30)


Ubuntu is an ancient african word meaning : "I can't configure Debian".

Hors ligne

#2 Le 04/12/2009, à 15:28

kyncani

Re : [Résolu]Question sur free()

$Gaël$ a écrit :

Est-ce que la libération de l'objet pMonObjet va-t-elle libérer pMonToto aussi?

Non, il n'y a pas de garbage collector en C.

$Gaël$ a écrit :

Pour faire proprement je devrais initialiser le pointeur de TOTO dans la variable OBJET à NULL avant de libérer la variable

Inutile.

Hors ligne

#3 Le 04/12/2009, à 18:05

$Gaël$

Re : [Résolu]Question sur free()

Merci, c'est ce que je pensais.


Ubuntu is an ancient african word meaning : "I can't configure Debian".

Hors ligne